home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / PROGTOOL / INTER40A.ZIP;1 / INTERRUP.D < prev    next >
Encoding:
Text File  |  1994-04-03  |  339.3 KB  |  9,356 lines

  1. Interrupt List, part 4 of 11
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------B-1A00-------------------------------
  4. INT 1A - TIME - GET SYSTEM TIME
  5.     AH = 00h
  6. Return: CX:DX = number of clock ticks since midnight
  7.     AL = midnight flag, nonzero if midnight passed since time last read
  8. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  9.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  10.       it, leading to loss of a day if two consecutive midnights pass
  11.       without a request for the time (e.g. if the system is on but idle)
  12. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch,INT 62/AX=0099h
  13. --------B-1A01-------------------------------
  14. INT 1A - TIME - SET SYSTEM TIME
  15.     AH = 01h
  16.     CX:DX = number of clock ticks since midnight
  17. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  18. --------B-1A02-------------------------------
  19. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  20.     AH = 02h
  21. Return: CF clear if successful
  22.         CH = hour (BCD)
  23.         CL = minutes (BCD)
  24.         DH = seconds (BCD)
  25.         DL = daylight savings flag (00h standard time, 01h daylight time)
  26.     CF set on error (i.e. clock not running or in middle of update)
  27. SeeAlso: AH=00h
  28. --------B-1A03-------------------------------
  29. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  30.     AH = 03h
  31.     CH = hour (BCD)
  32.     CL = minutes (BCD)
  33.     DH = seconds (BCD)
  34.     DL = daylight savings flag (00h standard time, 01h daylight time)
  35. SeeAlso: AH=01h
  36. --------B-1A04-------------------------------
  37. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  38.     AH = 04h
  39. Return: CF clear if successful
  40.         CH = century (BCD)
  41.         CL = year (BCD)
  42.         DH = month (BCD)
  43.         DL = day (BCD)
  44.     CF set on error
  45. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  46. --------B-1A05-------------------------------
  47. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  48.     AH = 05h
  49.     CH = century (BCD)
  50.     CL = year (BCD)
  51.     DH = month (BCD)
  52.     DL = day (BCD)
  53. SeeAlso: AH=04h,INT 21/AH=2Bh
  54. --------B-1A06-------------------------------
  55. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  56.     AH = 06h
  57.     CH = hour (BCD)
  58.     CL = minutes (BCD)
  59.     DH = seconds (BCD)
  60. Return: CF set on error (alarm already set or clock stopped for update)
  61.     CF clear if successful
  62. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  63.       time
  64. SeeAlso: AH=07h,INT 4A
  65. --------B-1A07-------------------------------
  66. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  67.     AH = 07h
  68. Return: alarm disabled
  69. Note:    does not disable the real-time clock's IRQ
  70. SeeAlso: AH=06h,INT 70
  71. --------B-1A08-------------------------------
  72. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  73.     AH = 08h
  74.     CH = hours in BCD
  75.     CL = minutes in BCD
  76.     DH = seconds in BCD
  77. SeeAlso: AH=09h
  78. --------B-1A09-------------------------------
  79. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  80.     AH = 09h
  81. Return: CH = hours in BCD
  82.     CL = minutes in BCD
  83.     DH = seconds in BCD
  84.     DL = alarm status
  85.         00h alarm not enabled
  86.         01h alarm enabled but will not power up system
  87.         02h alarm will power up system
  88. SeeAlso: AH=08h
  89. --------B-1A0A-------------------------------
  90. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  91.     AH = 0Ah
  92. Return: CF set on error
  93.     CF clear if successful
  94.         CX = count of days since Jan 1,1980
  95. SeeAlso: AH=04h,AH=0Bh
  96. --------B-1A0B-------------------------------
  97. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  98.     AH = 0Bh
  99.     CX = count of days since Jan 1,1980
  100. Return: CF set on error
  101.     CF clear if successful
  102. SeeAlso: AH=05h,AH=0Ah
  103. --------J-1A10-------------------------------
  104. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  105.     AH = 10h
  106.     ???
  107. Return: ???
  108. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  109. --------J-1A11-------------------------------
  110. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  111.     AH = 11h
  112.     ???
  113. Return: ???
  114. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  115. --------J-1A12-------------------------------
  116. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  117.     AH = 12h
  118.     ???
  119. Return: ???
  120. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  121. --------A-1A3601-----------------------------
  122. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  123.     AX = 3601h
  124. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  125.         ASCIZ string "WPCORP\0"
  126. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  127.       third party product wants to interface with it.  The third party
  128.       product must intercept this interrupt and return the address of a
  129.       keyboard monitor routine.
  130.     Before checking for keyboard input, and after every key entered by the
  131.       user, Word Perfect will call the routine whose address was provided
  132.       in DS:SI with the following parameters:
  133.         Entry:    AX = key code or 0
  134.             BX = WordPerfect state flag
  135.         Exit:    AX = 0 or key code
  136.             BX = 0 or segment address of buffer with key codes
  137.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  138. SeeAlso: INT 16/AX=5500h
  139. --------N-1A6108-----------------------------
  140. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  141.     AX = 6108h
  142.     STACK:    WORD    conversation ID (0000h-0009h)
  143.         DWORD    pointer to message buffer
  144.         WORD    length of message
  145.         DWORD    pointer to reply buffer
  146.         WORD    length of reply buffer
  147.         WORD    0000h (use default "Cparams" structure)
  148. Return: AX = status (see below)
  149.     STACK unchanged
  150. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  151.       which implements the Simple Network Application Protocol
  152. SeeAlso: AX=6205h
  153.  
  154. Values for status:
  155.  0000h    successful
  156.  F830h    "SNAP_ABORTED"
  157.  FC04h    "SNAP_SERVERDIED"
  158.  FC05h    "SNAP_RESEND"
  159.  FC06h    "SNAP_SELECTFAILED"
  160.  FC07h    "SNAP_WRONGVERSION"
  161.  FC08h    "SNAP_INVALIDACK"
  162.  FC09h    "SNAP_TIMEOUT"
  163.  FC0Ah    "SNAP_SERVERREJECT"
  164.  FC0Bh    "SNAP_NOREPLYDUE"
  165.  FC0Ch    "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  166.  FC0Dh    "SNAP_NOINIT"
  167.  FC0Eh    "SNAP_SOCKETERROR"
  168.  FC0Fh    "SNAP_BUFFERLIMIT"
  169.  FC10h    "SNAP_INVALIDCID"
  170.  FC11h    "SNAP_INVALIDOP"
  171.  FC12h    "SNAP_XMITFAIL"
  172.  FC13h    "SNAP_NOMORERETRIES"
  173.  FC14h    "SNAP_BADPARMS"
  174.  FC15h    "SNAP_NOMEMORY"
  175.  FC16h    "SNAP_NOMORECONVS"
  176.  FFFFh    failed (invalid function/parameter)
  177. --------N-1A6205-----------------------------
  178. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  179.     AX = 6205h
  180.     STACK:    WORD    conversation ID (0000h-0009h)
  181.         DWORD    pointer to message
  182.         WORD    length of message
  183.         WORD    0000h (use default "Cparms" structure)
  184. Return: AX = status (see AX=6108h)
  185.     STACK unchanged
  186. SeeAlso: AX=6108h
  187. --------N-1A6308-----------------------------
  188. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  189.     AX = 6308h
  190.     STACK:    WORD    offset of ASCIZ "guardian"
  191.         WORD    offset of ASCIZ hostname
  192.         WORD    offset of ASCIZ server name
  193.         WORD    offset of ASCIZ userid
  194.         WORD    offset of ASCIZ password
  195.         WORD    offset of password length
  196.         WORD    offset of password type
  197.         WORD    offset of "Cparms" structure (see below)
  198. Return: ???
  199.     STACK unchanged
  200. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  201.       to allocate a buffer)
  202. SeeAlso: AX=6405h,AX=7202h
  203.  
  204. Format of Cparms structure:
  205. Offset    Size    Description
  206.  00h    WORD    retry delay in seconds
  207.  02h    WORD    timeout delay in seconds
  208.  04h    WORD    maximum buffer size
  209.  06h    WORD    encryption level
  210. --------N-1A6405-----------------------------
  211. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  212.     AX = 6405h
  213.     STACK:    WORD    conversation ID (0000h-0009h)
  214.         DWORD    pointer to message buffer
  215.         WORD    length of message
  216.         WORD    0000h (use default "Cparms" structure)
  217. Return: AX = status (see AX=6108h)
  218.     STACK unchanged
  219. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  220.       which implements the Simple Network Application Protocol
  221. SeeAlso: AX=6308h
  222. --------N-1A6900-----------------------------
  223. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  224.     AX = 6900h
  225. Return: AX = value used for DS by resident code
  226. SeeAlso: AX=6A01h,AX=6F01h
  227. --------N-1A6A01-----------------------------
  228. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  229.     AX = 6A01h
  230.     STACK:    WORD    number of bytes to allocate
  231. Return: AX = offset of allocated buffer or 0000h if out of memory
  232.     STACK unchanged
  233. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  234.       which implements the Simple Network Application Protocol
  235. SeeAlso: AX=6B01h
  236. --------N-1A6B01-----------------------------
  237. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  238.     AX = 6B01h
  239.     STACK:    WORD    offset within SNAP data segment of previously allocated
  240.             buffer
  241. Return: STACK unchanged
  242. Note:    this call is a NOP if the specified offset is 0000h
  243. SeeAlso: AX=6A01h
  244. --------N-1A6C04-----------------------------
  245. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  246.     AX = 6C04h
  247.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  248.         WORD    segment of source buffer
  249.         WORD    offset of source buffer
  250.         WORD    number of bytes to copy
  251. Return: AX = offset of byte after last one copied to destination
  252.     STACK unchanged
  253. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  254.       which implements the Simple Network Application Protocol
  255. SeeAlso: AX=6D04h
  256. --------N-1A6D04-----------------------------
  257. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  258.     AX = 6D04h
  259.     STACK:    WORD    offset within SNAP data segment of source buffer
  260.         WORD    segment of destination buffer
  261.         WORD    offset of destination buffer
  262.         WORD    number of bytes to copy
  263. Return: AX = offset of byte after last one copied from source
  264.     buffer filled
  265.     STACK unchanged
  266. SeeAlso: AX=6C04h
  267. --------N-1A6E01-----------------------------
  268. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  269.     AX = 6E01h
  270.     STACK:    WORD    new value for ???
  271. Return: AX = old value of ???
  272.     STACK unchanged
  273. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  274.       which implements the Simple Network Application Protocol
  275. --------N-1A6F01-----------------------------
  276. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  277.     AX = 6F01h
  278.     STACK: WORD 0000h
  279. Return: AX = status
  280.         0000h SNAP is resident
  281.         other SNAP not present
  282.     STACK unchanged
  283. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  284.       which implements the Simple Network Application Protocol, and is
  285.       required by PCVENUS (a network shell).  The combination of SNAP and
  286.       PCVENUS allows the use of the Andrew File System as one or more
  287.       networked drives.
  288. SeeAlso: AX=6900h,AX=7400h
  289. --------N-1A7002-----------------------------
  290. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  291.     AX = 7002h
  292.     STACK:    WORD    anchor number (0000h-0009h)
  293.         WORD    new value for the anchor
  294. Return: AX = status
  295.         0000h successful
  296.         FFFFh failed (top word on stack not in range 00h-09h)
  297.     STACK unchanged
  298. SeeAlso: AX=7101h
  299. --------N-1A7101-----------------------------
  300. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  301.     AX = 7101h
  302.     STACK:    WORD    anchor number (0000h-0009h)
  303. Return: AX = anchor's value
  304.     STACK unchanged
  305. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  306.       which implements the Simple Network Application Protocol
  307. SeeAlso: AX=7002h
  308. --------N-1A7202-----------------------------
  309. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  310.     AX = 7202h
  311.     STACK:    WORD    conversation ID (0000h-0009h)
  312.         WORD    offset within resident data segment of "Cparms"
  313.             structure (see AX=6308h)
  314. Return: AX = status???
  315.     STACK unchanged
  316. SeeAlso: AX=6308h
  317. --------N-1A7302-----------------------------
  318. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  319.     AX = 7302h
  320.     STACK:    WORD    conversation ID (0000h-0009h)
  321.         WORD    offset within resident data segment of ???
  322. Return: AX = ???
  323.     ???
  324.     STACK unchanged
  325. SeeAlso: AX=7400h
  326. --------N-1A7400-----------------------------
  327. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  328.     AX = 7400h
  329. Return: AX = version (AH=major, AL=minor)
  330. Note:    this call is only valid if SNAP is installed
  331. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  332. --------N-1A75-------------------------------
  333. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  334.     AH = 75h
  335.     AL = ???
  336. Return: AX = ??? (0000h)
  337. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  338.       which implements the Simple Network Application Protocol
  339. --------N-1A76-------------------------------
  340. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  341.     AH = 76h
  342.     AL = ???
  343. Return: AX = ???
  344. --------N-1A77-------------------------------
  345. INT 1A - SNAP.EXE 3.4 - ???
  346.     AH = 77h
  347.     AL = ??? (at least 01h)
  348.     STACK:    WORD    ???
  349.         ???
  350. Return: ???
  351.     STACK unchanged
  352. --------N-1A7802-----------------------------
  353. INT 1A - SNAP.EXE 3.4 - ???
  354.     AX = 7802h
  355.     STACK:    WORD    ???
  356.         WORD    ???
  357. Return: ???
  358.     STACK unchanged
  359. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  360.       which implements the Simple Network Application Protocol
  361. --------s-1A7F-------------------------------
  362. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  363.     AH = 7Fh
  364.     ???
  365. Return: ???
  366. Note:    this function is not supported by the Tandy 1000SL/TL BIOS
  367. SeeAlso: AH=80h,AH=83h,AH=85h
  368. --------s-1A80-------------------------------
  369. INT 1A - PCjr, Tandy 2500???, Tandy 1000SL/TL - SET UP SOUND MULTIPLEXOR
  370.     AH = 80h
  371.     AL = 00h source is 8253 channel 2
  372.          01h source is cassette input
  373.          02h source is I/O channel "Audio IN"
  374.          03h source is sound generator chip
  375. Note:    although documented in the 1000TL Technical Reference, the 1000TL
  376.       BIOS has just an IRET for this call
  377. SeeAlso: AH=7Fh,AH=83h
  378. --------X-1A80-------------------------------
  379. INT 1A - PCMCIA Socket Services v1.00 - GET NUMBER OF ADAPTERS
  380.     AH = 80h
  381. Return: CF clear if successful
  382.         CX = 5353h ('SS') if Socket Services installed
  383.         AL = number of adapters present (0-16)
  384.         AH destroyed
  385.     CF set on error
  386.         AH = error code (see below)
  387. SeeAlso: AH=83h"PCMCIA"
  388.  
  389. Values for PCMCIA error codes:
  390.  01h    "BAD_ADAPTER" nonexistent adapter
  391.  02h    "BAD_ATTRIBUTE" invalid attribute specified
  392.  03h    "BAD_BASE" invalid system memory base address
  393.  04h    "BAD_EDC" invalid EDC generator specified
  394.  05h    "BAD_INDICATOR" invalid indicator specified
  395.  06h    "BAD_IRQ" invalid IRQ channel specified
  396.  07h    "BAD_OFFSET" invalid PCMCIA card offset specified
  397.  08h    "BAD_PAGE" invalid page specified
  398.  09h    "BAD_READ" unable to complete request
  399.  0Ah    "BAD_SIZE" invalid window size specified
  400.  0Bh    "BAD_SOCKET" nonexistent socket specified
  401.  0Ch    "BAD_TECHNOLOGY" unsupported Card Technology for writes
  402.  0Dh    "BAD_TYPE" unavailable window type specified
  403.  0Eh    "BAD_VCC" invalid Vcc power level index specified
  404.  0Fh    "BAD_VPP" invalid Vpp1 or Vpp2 power level index specified
  405.  10h    "BAD_WAIT" invalid number of wait states specified
  406.  11h    "BAD_WINDOW" nonexistent window specified
  407.  12h    "BAD_WRITE" unable to complete request
  408.  13h    "NO_ADAPTERS" no adapters installed, but Socket Services is present
  409.  14h    "NO_CARD" no card in socket
  410. --------X-1A81-------------------------------
  411. INT 1A - PCMCIA Socket Services v1.00 - REGISTER STATUS CHANGE CALLBACK
  412.     AH = 81h
  413.     DS:DX -> callback routine (see below) or 0000h:0000h to disable
  414. Return: CF clear if successful
  415.         AH destroyed
  416.     CF set on error
  417.         AH = error code (see AH=80h"PCMCIA")
  418. Note:    the callback will be invoked on any socket changes whose notification
  419.       has not been disabled with the status change enable mask; it may be
  420.       invoked either while processing a hardware interrupt from the adapter
  421.       or while processing the following Socket Services request
  422. SeeAlso: AH=80h"PCMCIA",AH=82h"PCMCIA"
  423.  
  424. Callback routine invoked with:
  425.     AL = adapter number
  426.     BH = status change interrupt enable mask (see below)
  427.     BL = socket number
  428.     DH = current socket status (see below)
  429.     DL = current card status (see below)
  430. Return: all registers preserved
  431. Notes:    the callback may be invoked during a hardware interrupt, and may not
  432.       call on Socket Services
  433.     the callback will be invoked once for each socket with a status change
  434.  
  435. Bitfields for status change enable mask:
  436. Bit(s)    Description
  437.  7    card detect change
  438.  6    ready change
  439.  5    battery warning change
  440.  4    battery dead change
  441.  3    insertion request
  442.  2    ejection request
  443.  1-0    reserved (0)
  444.  
  445. Bitfields for current socket status:
  446. Bit(s)    Description
  447.  7    card changed
  448.  6    reserved (0)
  449.  5    card insertion complete
  450.  4    card ejection complete
  451.  3    card insertion request pending
  452.  2    card ejection request pending
  453.  1    card locked
  454.  0    reserved (0)
  455.  
  456. Bitfields for current card status:
  457. Bit(s)    Description
  458.  7    card detect
  459.  6    ready
  460.  5    battery voltage detect 2 (battery warning)
  461.  4    battery voltage detect 1 (battery dead)
  462.  3-1    reserved (0)
  463.  0    write protected
  464. --------s-1A8100-----------------------------
  465. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  466.     AX = 8100h
  467. Return: AL > 80h if supported
  468.     AX = 00C4h if supported (1000SL/TL)
  469.         CF set if sound chip is busy
  470.         CF clear  if sound chip is free
  471. Note:    the value of CF is not definitive; call this function until CF is
  472.       clear on return, then call AH=84h"Tandy"
  473. --------s-1A82-------------------------------
  474. INT 1A - Tandy 2500???, Tandy 1000SL/TL - DIGITAL SOUND - RECORD SOUND
  475.     AH = 82h
  476.     ES:BX -> buffer for sound samples
  477.     CX = length of buffer
  478.     DX = transfer rate (1-4095, 1 is fastest)
  479. Return: AH = 00h
  480.     CF set if sound busy
  481.     CF clear if sound chip free
  482. Note:    the value in DX should be 1/10 the corresponding value for
  483.       INT 1A/AH=83h on the 1000TL, 1/11.5 on the 1000SL.  Call
  484.       INT 1A/AX=8100h and INT 1A/AH=84h before invoking this function.
  485.     The BIOS issues an INT 15/AX=91FBh when the input is complete
  486.     DMA across a 64K boundary is masked by the BIOS
  487. --------X-1A82-------------------------------
  488. INT 1A - PCMCIA Socket Services v1.00 - REGISTER CARD TECHNOLOGY CALLBACK
  489.     AH = 82h
  490.     DS:DX -> callback routine (see below) or 0000h:0000h
  491. Return: CF clear if successful
  492.         AH destroyed
  493.     CF set on error
  494.         AH = error code (see AH=80h"PCMCIA")
  495. Note:    the callback is invoked on a Write Multiple request with an unsupported
  496.       card technology type
  497. SeeAlso: AH=81h"PCMCIA",AH=94h
  498.  
  499. Callback routine invoked with:
  500.     ES:AX -> Low-Level Socket Services Routines (see below)
  501.     BH = socket attributes (see below)
  502.     CX = number of bytes or words to write
  503.     DS:SI -> data buffer to be written
  504.     DX:DI -> 26-bit linear card address
  505.     BP = card technology type
  506. Return: CF clear if successful
  507.     CF set on error
  508.         AH = error code (07h,0Ch,12h,14h) (see AH=80h"PCMCIA")
  509.  
  510. Bitfields for socket attributes:
  511. Bit(s)    Description
  512.  7-4    reserved (0)
  513.  3    packed buffer
  514.  2    even bytes only (only valid if 1 set)
  515.  1    data width (clear = byte, set = word)
  516.  0    memory type (clear = common, set = attribute)
  517.  
  518. Format of Low-Level Socket Services Routines:
  519. Offset    Size    Description
  520.  00h    WORD    offset of Write Many routine (see below)
  521.  02h    WORD    offset of Write One routine (see below)
  522.  04h    WORD    offset of Read One routine (see below)
  523.  06h    WORD    offset of Increment Offset routine (see below)
  524.  08h    WORD    offset of Set Offset routine (see below)
  525.  0Ah    WORD    offset of Get Status routine (see below)
  526.  
  527. Call Write Many routine with:
  528.     BH = socket attributes (see above)
  529.     CX = number of bytes or words to write
  530.     DS:SI -> data to be written
  531. Return: CF clear if successful
  532.     CF set on error
  533.  
  534. Call Write One routine with:
  535.     AL/AX = data to be written
  536.     BH = socket attributes (see above)
  537. Return: CF clear if successful
  538.     CF set on error
  539.  
  540. Call Read One routine with:
  541.     BH = socket attributes (see above)
  542. Return: CF clear if successful
  543.         AL/AX = data read
  544.     CF set on error
  545.  
  546. Call Increment Offset routine with:
  547.     BH = socket attributes (see above)
  548. Return: CF clear if successful
  549.     CF set on error
  550.  
  551. Call Set Offset routine with:
  552.     DX:DI = new offset address
  553. Return: CF clear if successful
  554.     CF set on error
  555.  
  556. Call Get Status routine with:
  557.     nothing
  558. Return: AL = current card status (see AH=81h"PCMCIA")
  559. --------s-1A83-------------------------------
  560. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  561.     AH = 83h
  562.     AL = volume (0=silence, 7=highest)
  563.     CX = number of bytes to play
  564.     DX = time between sound samples (multiples of 273 nanoseconds)
  565.         only bits 11-0 used
  566.     ES:BX -> sound data (array of 8-bit unsigned PCM samples)
  567. Return: AH = 00h
  568.     CF set if sound is busy
  569.     CF clear if sound chip is free
  570. Notes:    this call returns immediately while the sound plays in the
  571.       background; the sound chip is clocked at 3.57 MHz, with the low 12
  572.       bits of DX specifying the clock divisor
  573.     The BIOS appears to call INT 15/AX=91FBh when the sound device
  574.       underflows to allow another INT 1A/AH=83h for seamless playing of
  575.       long sounds.
  576. SeeAlso: AH=84h"Tandy",INT 15/AH=91h
  577. --------X-1A83-------------------------------
  578. INT 1A - PCMCIA Socket Services v1.00 - GET SOCKET SERVICES VERSION NUMBER
  579.     AH = 83h
  580.     AL = adapter number
  581. Return: CF clear if successful
  582.         AX = Socket Services version (BCD)
  583.         BX = implementation version (BCD)
  584.         CX = 5353h ("SS")
  585.         DS:SI -> ASCIZ implementor description
  586.     CF set on error
  587.         AH = error code (01h) (see AH=80h"PCMCIA")
  588. Note:    the current version (from the Revision A.00 documentation) of Socket
  589.       Services is 1.00 (AX=0100h)
  590. SeeAlso: AH=80h"PCMCIA"
  591. --------s-1A84-------------------------------
  592. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  593.     AH = 84h
  594. Return: ???
  595. Note:    the BIOS will call INT 15/AX=91FBh when the sound has stopped playing
  596. SeeAlso: AH=83h"Tandy",AH=85h"Tandy"
  597. --------X-1A84-------------------------------
  598. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE ADAPTER
  599.     AH = 84h
  600.     AL = adapter number
  601. Return: CF clear if successful
  602.         AH destroyed
  603.         BH = number of windows
  604.         BL = number of sockets (1-16)
  605.         CX = number of EDCs
  606.         DH = capabilities (see below)
  607.         DL = status change interrupt used (only if DH bit 3 set)(see below)
  608.     CF set on error
  609.         AH = error code (01h) (see AH=80h"PCMCIA")
  610. SeeAlso: AH=80h"PCMCIA",AH=85h"PCMCIA",AH=87h
  611.  
  612. Bitfields for capabilities:
  613. Bit(s)    Description
  614.  7-6    reserved (0)
  615.  5    status change interrupt is hardware shareable
  616.  4    status change interrupt is software shareable
  617.  3    status change interrupt
  618.  2    data bus width is per-socket rather than per-window
  619.  1    power management is per-adapter rather than per-socket
  620.  0    indicators are per-adapter rather than per-socket
  621.  
  622. Values for status change interrupt usage:
  623.  00h-0Fh IRQ level
  624.  10h    NMI
  625.  11h    I/O check
  626.  12h    bus error
  627.  13h    vendor specific
  628.  14h-FFh reserved
  629. --------s-1A85-------------------------------
  630. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  631.     AH = 85h
  632.     ???
  633. Return: ???
  634. Note:    this function is not supported by the Tandy 1000SL/TL BIOS
  635. SeeAlso: AH=7Fh,AH=83h"Tandy"
  636. --------X-1A85-------------------------------
  637. INT 1A - PCMCIA Socket Services v1.00 - GET ADAPTER
  638.     AH = 85h
  639.     AL = adapter number
  640. Return: CF clear if successful
  641.         AH destroyed
  642.         DH = adapter attributes (see below)
  643.     CF set on error
  644.         AH = error code (01h) (see AH=80h"PCMCIA")
  645. SeeAlso: AH=84h"PCMCIA",AH=86h
  646.  
  647. Bitfields for adapter attributes:
  648. Bit(s)    Description
  649.  7-5    reserved (0)
  650.  4    hardware share status change
  651.  3    software share status change
  652.  2    enable status change interrupts
  653.  1    adapter preserves state information during reduced power consumption
  654.  0    attempting to reduce power consumption
  655. --------X-1A86-------------------------------
  656. INT 1A - PCMCIA Socket Services v1.00 - SET ADAPTER
  657.     AH = 86h
  658.     AL = adapter number
  659.     DH = new adapter attributes (see AH=85h"PCMCIA")
  660. Return: CF clear if successful
  661.         AH destroyed
  662.     CF set on error
  663.         AH = error code (01h) (see AH=80h"PCMCIA")
  664. SeeAlso: AH=84h"PCMCIA",AH=85h"PCMCIA"
  665. --------X-1A87-------------------------------
  666. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE WINDOW
  667.     AH = 87h
  668.     AL = adapter number
  669.     BH = window number
  670. Return: CF clear if successful
  671.         AH destroyed
  672.         BL = capabilities (see below)
  673.         CX = bitmap of assignable sockets
  674.         DH = EISA A15-A12 address lines (in bits 7-4, bits 3-0 = 0)
  675.         DL = supported access speeds (see below)
  676.         DS:SI -> Memory Window Characteristics table (see below)
  677.         DS:DI -> I/O Window Characteristics table (see below)
  678.     CF set on error
  679.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  680. SeeAlso: AH=84h"PCMCIA",AH=88h,AH=89h,AH=8Ch
  681.  
  682. Bitfields for window capabilities:
  683. Bit(s)    Description
  684.  7-5    reserved (0)
  685.  4    separate enable for EISA comon space
  686.  3    EISA I/O mappable
  687.  2    I/O space
  688.  1    attribute memory
  689.  0    common memory
  690.  
  691. Bitfields for supported access speeds:
  692. Bit(s)    Description
  693.  7    reserved (0)
  694.  6    600 ns
  695.  5    300 ns
  696.  4    250 ns
  697.  3    200 ns
  698.  2    150 ns
  699.  1    100 ns
  700.  0    WAIT line monitoring
  701.  
  702. Format of Memory Window Characteristics table:
  703. Offset    Size    Description
  704.  00h    WORD    window capabilities (see below)
  705.  02h    WORD    minimum base address in 4K pages
  706.  04h    WORD    maximum base address in 4K pages
  707.  06h    WORD    minimum window size in 4K pages
  708.  08h    WORD    maximum window size in 4K pages
  709.  0Ah    WORD    window size granularity (4K units)
  710.  0Ch    WORD    required base address alignment (4K units)
  711.  0Eh    WORD    required card offset alignment (4K units)
  712.  
  713. Format of I/O Window Characteristics table:
  714. Offset    Size    Description
  715.  00h    WORD    window capabilities (see below)
  716.  02h    WORD    minimum base address in bytes
  717.  04h    WORD    maximum base address in bytes
  718.  06h    WORD    minimum window size in bytes
  719.  08h    WORD    maximum window size in bytes
  720.  0Ah    WORD    window size granularity (bytes)
  721.  
  722. Bitfields for window capabilities:
  723. Bit(s)    Description
  724.  0    programmable base address
  725.  1    programmable window size
  726.  2    window disable/enable supported
  727.  3    8-data bus
  728.  4    16-data bus
  729.  5    base address alignment on size boundary required
  730.  6    power-of-two size granularity
  731. ---memory windows---
  732.  7    card offset must be aligned on size boundary
  733.  8    paging hardware available
  734.  9    paging hardware shared
  735.  10    page disable/enable supported
  736.  11-15    reserved (0)
  737. ---I/O windows---
  738.  7-15    reserved (0)
  739. --------X-1A88-------------------------------
  740. INT 1A - PCMCIA Socket Services v1.00 - GET WINDOW
  741.     AH = 88h
  742.     AL = adapter number
  743.     BH = window number
  744. Return: CF clear if successful
  745.         AH destroyed
  746.         BL = socket number (0-16) (0 = not assigned)
  747.         CX = window size (bytes for I/O window, 4K units for memory window)
  748.         DH = window attributes (see below)
  749.         DL = access speed (only one bit set) (see AH=87h)
  750.         SI = window base address (bytes if I/O, 4K units if memory)
  751.         DI = card offset address (memory only, 4K units)
  752.     CF set on error
  753.         AH = error code (01h,11h) (see AH=80h"PCMCIA")
  754. SeeAlso: AH=87h,AH=89h,AH=8Ah
  755.  
  756. Bitfields for window attributes:
  757. Bit(s)    Description
  758.  0    memory-mapped rather than I/O-mapped
  759.  1    attribute memory rather than common (memory-mapped)
  760.     EISA mapped (I/O)
  761.  2    enabled
  762.  3    16-data path
  763.  4    subdivided into pages (memory-mapped only)
  764.  5    non-specific access slot enable (EISA-mapped only)
  765.  6-7    reserved (0)
  766. --------X-1A89-------------------------------
  767. INT 1A - PCMCIA Socket Services v1.00 - SET WINDOW
  768.     AH = 89h
  769.     AL = adapter number
  770.     BH = window number
  771.     BL = socket number
  772.     CX = window size (bytes if I/O window, 4K units if memory window)
  773.     DH = window attributes (see AH=88h)
  774.     DL = access speed (only one bit set) (see AH=87h)
  775.     SI = window base address (bytes if I/O, 4K units if memory window)
  776.     DI = card offset addrress (memory only, 4K units)
  777. Return: CF clear if successful
  778.         AH destroyed
  779.     CF set on error
  780.         AH = error code (01h,03h,07h,08h,0Ah,0Bh,0Dh,10h,11h)
  781.         (see AH=80h"PCMCIA")
  782. SeeAlso: AH=87h,AH=88h,AH=8Bh
  783. --------X-1A8A-------------------------------
  784. INT 1A - PCMCIA Socket Services v1.00 - GET PAGE
  785.     AH = 8Ah
  786.     AL = adapter number
  787.     BH = window number
  788.     BL = page number
  789. Return: CF clear if successful
  790.         AH destroyed
  791.         DX = page attributes (see below)
  792.         DI = memory card offset (4K units)
  793.     CF set on error
  794.         AH = error code (01h,08h,11h) (see AH=80h"PCMCIA")
  795. Notes:    this function is only valid for memory-mapped windows
  796.     the socket being operated on is implied by the previous AH=89h call
  797. SeeAlso: AH=88h,AH=8Bh
  798.  
  799. Bitfields for page attributes:
  800. Bit(s)    Description
  801.  0    page enabled
  802.  15-1    reserved (0)
  803. --------X-1A8B-------------------------------
  804. INT 1A - PCMCIA Socket Services v1.00 - SET PAGE
  805.     AH = 8Bh
  806.     AL = adapter number
  807.     BH = window number
  808.     BL = page number
  809.     DX = page attributes (see AH=8Ah)
  810.     DI = memory card offset (4K units)
  811. Return: CF clear if successful
  812.         AH destroyed
  813.     CF set on error
  814.         AH = error code (01h,02h,07h,08h,11h) (see AH=80h"PCMCIA")
  815. Notes:    this function is only valid for memory-mapped windows
  816.     the socket being operated on is implied by the previous AH=89h call
  817. SeeAlso: AH=89h,AH=8Ah
  818. --------X-1A8C-------------------------------
  819. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE SOCKET
  820.     AH = 8Ch
  821.     AL = adapter number
  822.     BL = socket number (01h to maximum supported by adapter)
  823. Return: CF clear if successful
  824.         AH destroyed
  825.         DH = capabilities (see below)
  826.         DL = hardware indicators (see below)
  827.         DS:SI -> Socket Characteristics table (see below)
  828.         DS:DI -> Power Management table (see below)
  829.     CF set on error
  830.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  831. SeeAlso: AH=87h,AH=8Dh,AH=8Eh
  832.  
  833. Bitfields for socket capabilities:
  834. Bit(s)    Description
  835.  0    card change
  836.  1    card lock
  837.  2    insert card (motor control)
  838.  3    eject card (motor control)
  839.  4-7    reserved (0)
  840.  
  841. Bitfields for socket hardware indicators:
  842. Bit(s)    Description
  843.  0    busy status
  844.  1    write-protected
  845.  2    battery status
  846.  3    card lock status
  847.  4    XIP status (eXecute-In-Place)
  848.  5-7    reserved (0)
  849.  
  850. Format of Socket Characteristics table:
  851. Offset    Size    Description
  852.  00h    WORD    supported card types (see below)
  853.  02h    WORD    steerable IRQ levels (bit 0 = IRQ0 to bit 15 = IRQ15)
  854.  04h    WORD    additional steerable IRQ levels
  855.         bit 0: NMI
  856.         bit 1: I/O check
  857.         bit 2: bus error
  858.         bit 3: vendor-unique
  859.         bits 4-7 reserved (0)
  860.  
  861. Bitfields for supported card types:
  862. Bit(s)    Description
  863.  0    memory card
  864.  1    I/O card
  865.  2-7    reserved (0)
  866.  
  867. Format of Power Management table:
  868. Offset    Size    Description
  869.  00h    WORD    number of entries in table (0 if power management not avail)
  870.  02h 2N BYTEs    power levels
  871.         byte 0: voltage in 0.1V units
  872.         byte 1: power supply
  873.             bit 7: Vcc
  874.             bit 6: Vpp1
  875.             bit 5: Vpp2
  876. --------X-1A8D-------------------------------
  877. INT 1A - PCMCIA Socket Services v1.00 - GET SOCKET
  878.     AH = 8Dh
  879.     AL = adapter number
  880.     BL = socket number (01h to maximum supported by adapter)
  881. Return: CF clear if successful
  882.         AH destroyed
  883.         BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  884.         CH = Vcc level (lower nybble)
  885.         CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  886.         DH = current socket status (see AH=81h"PCMCIA")
  887.         DL = indicators (see AH=8Ch)
  888.         SI = card type (see below)
  889.         DI = IRQ level steering (I/O only) (see below)
  890.     CF set on error
  891.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  892. SeeAlso: AH=8Ch,AH=8Eh
  893.  
  894. Bitfields for card type:
  895. Bit(s)    Description
  896.  0    memory
  897.  1    I/O
  898.  2-15    reserved (0)
  899.  
  900. Bitfields for I/O level steering:
  901. Bit(s)    Description
  902.  15    interrupt steering enabled
  903.  14-5    reserved (0)
  904.  4-0    IRQ level (0-15=IRQ,16=NMI,17=I/O check,18=bus error,19=vendor)
  905. --------X-1A8E-------------------------------
  906. INT 1A - PCMCIA Socket Services v1.00 - SET SOCKET
  907.     AH = 8Eh
  908.     AL = adapter number
  909.     BL = socket number (01h to maximum supported by adapter)
  910.     BH = status change interrupt enable mask (see AH=81h"PCMCIA")
  911.     CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  912.     DH = current socket status (see AH=81h"PCMCIA")
  913.     DL = indicators (see AH=8Ch)
  914.     SI = card type (see AH=8Dh)
  915.     DI = IRQ level steering (I/O only) (see AH=8Dh)
  916. Return: CF clear if successful
  917.         AH destroyed
  918.     CF set on error
  919.         AH = error code (01h,02h,05h,06h,0Bh,0Eh,0Fh) (see AH=80h"PCMCIA")
  920. SeeAlso: AH=8Ch,AH=8Dh
  921. --------X-1A8F-------------------------------
  922. INT 1A - PCMCIA Socket Services v1.00 - GET CARD
  923.     AH = 8Fh
  924.     AL = adapter number
  925.     BL = socket number (01h to maximum supported by adapter)
  926. Return: CF clear if successful
  927.         AH destroyed
  928.         DL = current card status (see AH=81h"PCMCIA")
  929.     CF set on error
  930.         AH = error code (01h,0Bh) (see AH=80h"PCMCIA")
  931. SeeAlso: AH=8Dh,AH=90h
  932. --------X-1A90-------------------------------
  933. INT 1A - PCMCIA Socket Services v1.00 - RESET CARD
  934.     AH = 90h
  935.     AL = adapter number
  936.     BL = socket number (01h to maximum supported by adapter)
  937. Return: CF clear if successful
  938.         AH destroyed
  939.     CF set on error
  940.         AH = error code (01h,0Bh,14h) (see AH=80h"PCMCIA")
  941. Note:    toggles RESET pin of the specified card, but does not wait after
  942.       toggling the pin; it is the caller's responsibility to avoid
  943.       accessing the card before it is ready again
  944. --------X-1A91-------------------------------
  945. INT 1A - PCMCIA Socket Services v1.00 - READ ONE
  946.     AH = 91h
  947.     AL = adapter number
  948.     BL = socket number (01h to maximum supported by adapter)
  949.     BH = attributes (see below)
  950.     DX:SI = card address
  951. Return: CF clear if successful
  952.         AH destroyed
  953.         CL/CX = value read
  954.     CF set on error
  955.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  956.         CX may be destroyed
  957. Note:    this function is only valid for I/O-mapped sockets
  958. SeeAlso: AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  959.  
  960. Bitfields for attributes:
  961. Bit(s)    Description
  962.  2    even bytes only
  963.  1    word rather than byte
  964.  0    attribute memory instead of common memory
  965. --------X-1A92-------------------------------
  966. INT 1A - PCMCIA Socket Services v1.00 - WRITE ONE
  967.     AH = 92h
  968.     AL = adapter number
  969.     BL = socket number (01h to maximum supported by adapter)
  970.     BH = attributes (see AH=91h)
  971.     CL/CX = value to write
  972.     DX:SI = card address
  973. Return: CF clear if successful
  974.         AH destroyed
  975.     CF set on error
  976.         AH = error code (01h,07h,0Bh,12h,14h) (see AH=80h"PCMCIA")
  977. Note:    this function is only valid for I/O-mapped sockets; it also does not
  978.       implement Card Technology handling--use AH=94h when writing to
  979.       non-RAM technologies
  980. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  981. --------X-1A93-------------------------------
  982. INT 1A - PCMCIA Socket Services v1.00 - READ MULTIPLE
  983.     AH = 93h
  984.     AL = adapter number
  985.     BL = socket number (01h to maximum supported by adapter)
  986.     BH = attributes (see AH=91h)
  987.     CX = number of bytes or words to read
  988.     DX:SI = card address
  989.     DS:DI -> data buffer to be filled
  990. Return: CF clear if successful
  991.         AH destroyed
  992.     CF set on error
  993.         AH = error code (01h,07h,09h,0Bh,14h) (see AH=80h"PCMCIA")
  994. Note:    this function is only available on I/O-mapped sockets
  995. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  996. --------X-1A94-------------------------------
  997. INT 1A - PCMCIA Socket Services v1.00 - WRITE MULTIPLE
  998.     AH = 94h
  999.     AL = adapter number
  1000.     BL = socket number (01h to maximum supported by adapter)
  1001.     BH = attributes (see AH=91h)
  1002.     CX = number of bytes or words to read
  1003.     DX:DI = card address
  1004.     DS:SI -> buffer containing data
  1005.     BP = Card Technology type (0000h = RAM)
  1006. Return: CF clear if successful
  1007.         AH destroyed
  1008.     CF set on error
  1009.         AH = error code (01h,07h,0Bh,0Ch,12h,14h) (see AH=80h"PCMCIA")
  1010. Notes:    this function is only available on I/O-mapped sockets
  1011.     Socket Services calls the Card Technology callback (see AH=82h"PCMCIA")
  1012.       for any card technology it does not directly support
  1013. SeeAlso: AH=82h"PCMCIA",AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  1014. --------X-1A95-------------------------------
  1015. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE ERROR DETECTION CODE
  1016.     AH = 95h
  1017.     AL = adapter number
  1018.     BH = EDC generator number
  1019. Return: CF clear if successful
  1020.         AH destroyed
  1021.         CX = bitmap of assignable sockets
  1022.         DH = EDC capabilities (see below)
  1023.         DL = supported EDC types (see below)
  1024.     CF set on error
  1025.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  1026. SeeAlso: AH=96h,AH=9Ch
  1027.  
  1028. Bitfields for EDC capabilities:
  1029. Bit(s)    Description
  1030.  0    unidirectional only generation
  1031.  1    bidirectional only generation
  1032.  2    register-based (I/O-mapped) support
  1033.  3    memory-mapped support
  1034.  4    pausable
  1035.  5-7    reserved (0)
  1036.  
  1037. Bitfields for supported EDC types:
  1038. Bit(s)    Description
  1039.  0    8-checksum
  1040.  1    16-CRC-SDLC
  1041.  2-7    reserved (0)
  1042. --------X-1A96-------------------------------
  1043. INT 1A - PCMCIA Socket Services v1.00 - GET ERROR DETECTION CODE
  1044.     AH = 96h
  1045.     AL = adapter number
  1046.     BH = EDC generator number
  1047. Return: CF clear if successful
  1048.         AH destroyed
  1049.         BL = socket number
  1050.         DH = EDC attributes (see below)
  1051.         DL = EDC type (see AH=95h) (only one bit set)
  1052.     CF set on error
  1053.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  1054. SeeAlso: AH=95h,AH=97h,AH=9Ch
  1055.  
  1056. Bitfields for EDC attributes:
  1057. Bit(s)    Description
  1058.  0    unidirectional only
  1059.  1    (if 0 set) clear=read, set=write
  1060.  2-7    reserved (0)
  1061. --------X-1A97-------------------------------
  1062. INT 1A - PCMCIA Socket Services v1.00 - SET ERROR DETECTION CODE
  1063.     AH = 97h
  1064.     AL = adapter number
  1065.     BH = EDC generator
  1066.     BL = socket number
  1067.     DH = EDC attributes (see AH=96h)
  1068.     DL = EDC type (see AH=95h) (only one bit may be set)
  1069. Return: CF clear if successful
  1070.         AH destroyed
  1071.     CF set on error
  1072.         AH = error code (01h,02h,04h,0Bh) (see AH=80h"PCMCIA")
  1073. SeeAlso: AH=96h,AH=9Ch
  1074. --------X-1A98-------------------------------
  1075. INT 1A - PCMCIA Socket Services v1.00 - START ERROR DETECTION CODE
  1076.     AH = 98h
  1077.     AL = adapter number
  1078.     BH = EDC generator
  1079. Return: CF clear if successful
  1080.         AH destroyed
  1081.     CF set on error
  1082.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  1083. SeeAlso: AH=96h,AH=99h,AH=9Bh,AH=9Ch
  1084. --------X-1A99-------------------------------
  1085. INT 1A - PCMCIA Socket Services v1.00 - PAUSE ERROR DETECTION CODE
  1086.     AH = 99h
  1087.     AL = adapter number
  1088.     BH = EDC generator
  1089. Return: CF clear if successful
  1090.         AH destroyed
  1091.     CF set on error
  1092.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  1093. SeeAlso: AH=9Ah
  1094. --------X-1A9A-------------------------------
  1095. INT 1A - PCMCIA Socket Services v1.00 - RESUME ERROR DETECTION CODE
  1096.     AH = 9Ah
  1097.     AL = adapter number
  1098.     BH = EDC generator
  1099. Return: CF clear if successful
  1100.         AH destroyed
  1101.     CF set on error
  1102.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  1103. SeeAlso: AH=99h,AH=98h
  1104. --------X-1A9B-------------------------------
  1105. INT 1A - PCMCIA Socket Services v1.00 - STOP ERROR DETECTION CODE
  1106.     AH = 9Bh
  1107.     AL = adapter number
  1108.     BH = EDC generator
  1109. Return: CF clear if successful
  1110.         AH destroyed
  1111.     CF set on error
  1112.         AH = error code (see AH=80h"PCMCIA")
  1113. SeeAlso: AH=98h,AH=99h,AH=9Ch
  1114. --------X-1A9C-------------------------------
  1115. INT 1A - PCMCIA Socket Services v1.00 - READ ERROR DETECTION CODE
  1116.     AH = 9Ch
  1117.     AL = adapter number
  1118.     BH = EDC generator
  1119. Return: CF clear if successful
  1120.         AH destroyed
  1121.         DL/DX = computed checksum or CRC
  1122.     CF set on error
  1123.         AH = error code (01h,04h) (see AH=80h"PCMCIA")
  1124. SeeAlso: AH=95h,AH=96h,AH=98h,AH=99h,AH=9Bh
  1125. --------c-1AA0-------------------------------
  1126. INT 1A U - Disk Spool II v2.07+ - INSTALLATION CHECK
  1127.     AH = A0h
  1128. Return: AH = B0h if installed
  1129.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  1130.         ES = code segment
  1131.         ES:BX -> name of current spool file
  1132.         ES:SI -> current despool file
  1133.         CL = despooler state (00h disabled, 41h enabled)
  1134.         CH = spooler state (00h disabled, 41h enabled)
  1135.         DL = 00h despooler is currently active printing a file
  1136.            = 41h despooler is standing by
  1137.         DH = 00h ???
  1138.            = 41h ???
  1139.         DI = 0000h ???
  1140.          0001h ???
  1141. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  1142.       Software Company
  1143. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1144.       as that is a licensed version of Disk Spool II
  1145. SeeAlso: AH=ABh,AH=C0h,AH=D0h,AH=E1h
  1146. --------c-1AAB-------------------------------
  1147. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  1148.     AH = ABh
  1149. Return: AH = BAh if installed
  1150.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  1151.         ES = code segment
  1152.         ES:BX -> name of current spool file
  1153.         ES:SI -> current despool file
  1154.         CL = 00h despooler is disabled
  1155.            = 41h despooler is enabled
  1156.         CH = 00h spooler is disabled
  1157.            = 41h spooler is enabled
  1158.         DL = 00h despooler is currently active printing a file
  1159.            = 41h despooler is standing by
  1160.         DH = 00h ???
  1161.            = 41h ???
  1162.         DI = 0000h ???
  1163.          0001h ???
  1164. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  1165.       Software Company
  1166. SeeAlso: AH=A0h,AH=ACh,AH=ADh,AH=E1h
  1167. --------c-1AAC-------------------------------
  1168. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  1169.     AH = ACh
  1170. Return: (see AH=ABh)
  1171. Note:    this function is identical to AH=ABh
  1172. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  1173. --------c-1AAD-------------------------------
  1174. INT 1A U - Disk Spool II v1.83 - FUNCTION CALLS
  1175.     AH = ADh
  1176.     AL = function code
  1177.         02h enable spooler only
  1178.         03h enable the despooler
  1179.         04h disable the despooler
  1180.         08h inhibit popup menu
  1181.         09h enable popup menu
  1182.         0Ah ???
  1183.         0Bh disable the spooler
  1184.         0Ch start despooler after last successfully printed document???
  1185.         0Dh start despooler at the exact point where it last left off???
  1186.         0Eh pop up the menu
  1187.         0Fh ???
  1188.         11h ???
  1189.         14h ???
  1190.         15h ???
  1191.         16h ???
  1192.         17h ???
  1193.         18h ???
  1194.         19h ???
  1195.         20h clear file pointed to by the despooler???
  1196.         21h ???
  1197.         22h ???
  1198.         23h ???
  1199.         30h ???
  1200. Return: AH = 00h if successful
  1201. SeeAlso: AH=ABh
  1202. --------d-1AB001CX4D52-----------------------
  1203. INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
  1204.     AX = B001h
  1205.     CX = 4D52h ("MR")
  1206.     DX = 4349h ("CI")
  1207. Return: CX = 4943h ("IC") if installed
  1208.     DX = 524Dh ("RM") if installed
  1209.         ES:DI -> MRCINFO structure (see below)
  1210. Note:    this call is functionally identical to INT 2F/AX=4A12h, which should
  1211.       be called first, as this call is used for the first, ROM-based
  1212.       MRCI server, while the other call is used for RAM-based servers
  1213.       which may be partially or entirely replacing a prior server
  1214. SeeAlso: INT 2F/AX=4A12h
  1215.  
  1216. Format of MRCINFO structure:
  1217. Offset    Size    Description
  1218.  00h  4 BYTEs    vendor signature
  1219.         "MSFT" Microsoft
  1220.  04h    WORD    server version (high=major)
  1221.  06h    WORD    MRCI specification version
  1222.  08h    DWORD    address of server entry point
  1223.  0Ch    WORD    bit flags: server capabilities (see below)
  1224.  0Eh    WORD    bit flags: hardware assisted capabilities (see below)
  1225.  10h    WORD    maximum block size supported by server (at least 8192 bytes)
  1226.  
  1227. Bitfields for capabilities:
  1228. Bit(s)    Description
  1229.  0    standard compress
  1230.  1    standard decompress
  1231.  2    update compress
  1232.  3    MaxCompress (not present in initial public release)
  1233.  4    reserved
  1234.  5    incremental decompress
  1235.  6-14    reserved
  1236.  15    this structure is in ROM and can't be modified
  1237.     (server capabilities only)
  1238.  
  1239. Call MRCI entry point with:
  1240.     DS:SI -> MRCREQUEST structure (see below)
  1241.     CX = type of client (0000h application, 0001h file system)
  1242.     AX = operation
  1243.         0001h perform standard compression
  1244.         0002h perform standard decompression
  1245.         0004h perform update compression
  1246.         0008h perform MaxCompress
  1247.         0020h perform incremental decompression
  1248.     AX = FFFFh clear flags
  1249.         BX = bitmask of flags to clear (set bits in BX are flags to clear)
  1250. Return: AX = status
  1251.         0000h successful
  1252.         0001h invalid function
  1253.         0002h server busy, try again
  1254.         0003h destination buffer too small
  1255.         0004h incompressible data
  1256.         0005h bad compressed data format
  1257.     BP destroyed (MS-DOS 6.2)
  1258. Note:    MRCI driver may chain to a previous driver
  1259.  
  1260. Format of MRCREQUEST structure:
  1261. Offset    Size    Description
  1262.  00h    DWORD    pointer to source buffer
  1263.  04h    WORD    size of source buffer (0000h = 64K)
  1264.  06h    WORD    (UpdateCompress only)
  1265.         (call) offset in source buffer of beginning of changed data
  1266.         (return) offset in destination buffer of beginning of changed
  1267.             compressed data
  1268.  08h    DWORD    pointer to destination buffer
  1269.         must contain original compressed data for UpdateCompress
  1270.  0Ch    WORD    size of destination buffer (0000h = 64K)
  1271.         any compression: size of buffer for compressed data
  1272.         standard decompression: number of bytes to be decompressed
  1273.         incremental decompression: number of byte to decompress now
  1274.         (return) actual size of resulting data
  1275.  0Eh    WORD    client compressed data storage allocation size
  1276.  10h    DWORD    incremental decompression state data
  1277.         set to 00000000h before first incremental decompression call
  1278. Notes:    the source and destination buffers may not overlap
  1279.     the source and destination buffer sizes should normally be the same
  1280.     application should not update the contents of the MRCREQUEST structure
  1281.       between incremental decompression calls
  1282. --------X-1AB101-----------------------------
  1283. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK
  1284.     AX = B101h
  1285. Return: AH = 00h if installed
  1286.         CF clear
  1287.         EDX = 20494350h (' ICP')
  1288.         EDI = physical address of protected-mode entry point (see below)
  1289.         AL = PCI hardware characteristics (see below)
  1290.         BH = PCI interface level major version (BCD)
  1291.         BL = PCI interface level minor version (BCD)
  1292.         CL = number of last PCI bus in system
  1293.     EAX, EBX, ECX, and EDX may be modified
  1294.     all other flags (except IF) may be modified
  1295. Note:    this function may require up to 1024 byte of stack; it will not enable
  1296.       interrupts if they were disabled before making the call
  1297. SeeAlso: AX=B181h
  1298.  
  1299. Bitfields for PCI hardware characteristics:
  1300. Bit(s)    Description
  1301.  0    configuration space access mechanism 1 supported
  1302.  1    configuration space access mechanism 2 supported
  1303.  2-3    reserved
  1304.  4    Special Cycle generation mechanism 1 supported
  1305.  5    Special Cycle generation mechanism 2 supported
  1306.  6-7    reserved
  1307.  
  1308. Call protected-mode entry point with:
  1309.     registers as for real/V86-mode INT call
  1310.     CS = ring 0 descriptor with access to full address space
  1311. Return: as for real/V86-mode call
  1312. --------X-1AB102-----------------------------
  1313. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE
  1314.     AX = B102h
  1315.     CX = device ID
  1316.     DX = vendor ID
  1317.     SI = device index (0-n)
  1318. Return: CF clear if successful
  1319.     CF set on error
  1320.     AH = status
  1321.         00h successful
  1322.         BL = bus number
  1323.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  1324.         83h bad vendor ID
  1325.         86h device not found
  1326.     EAX, EBX, ECX, and EDX may be modified
  1327.     all other flags (except IF) may be modified
  1328. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1329.       interrupts if they were disabled before making the call
  1330.     device ID FFFFh may be reserved as a wildcard in future implementations
  1331.     the meanings of BL and BH on return may be exchanged in future
  1332.       implementations
  1333.     all devices sharing a single vendor ID and device ID may be enumerated
  1334.       by incrementing SI from 0 until error 86h is returned
  1335. SeeAlso: AX=B182h
  1336. --------X-1AB103-----------------------------
  1337. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE
  1338.     AX = B103h
  1339.     ECX = class code (bits 23-0)
  1340.     SI = device index (0-n)
  1341. Return: CF clear if successful
  1342.     CF set on error
  1343.     AH = status
  1344.         00h successful
  1345.         BL = bus number
  1346.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  1347.         86h device not found
  1348.     EAX, EBX, ECX, and EDX may be modified
  1349.     all other flags (except IF) may be modified
  1350. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1351.       interrupts if they were disabled before making the call
  1352.     the meanings of BL and BH on return may be exchanged in future
  1353.       implementations
  1354.     all devices sharing the same Class Code may be enumerated by
  1355.       incrementing SI from 0 until error 86h is returned
  1356. SeeAlso: AX=B183h
  1357. --------X-1AB106-----------------------------
  1358. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS
  1359.     AX = B106h
  1360.     BL = bus number
  1361.     EDX = Special Cycle data
  1362. Return: CF clear if successful
  1363.     CF set on error
  1364.     AH = status
  1365.         00h successful
  1366.         81h unsupported function
  1367.     EAX, EBX, ECX, and EDX may be modified
  1368.     all other flags (except IF) may be modified
  1369. Note:    this function may require up to 1024 byte of stack; it will not enable
  1370.       interrupts if they were disabled before making the call
  1371. SeeAlso: AX=B186h
  1372. --------X-1AB108-----------------------------
  1373. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE
  1374.     AX = B108h
  1375.     BL = bus number
  1376.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1377.     DI = register number (0000h-00FFh)
  1378. Return: CF clear if successful
  1379.         CL = byte read
  1380.     CF set on error
  1381.     AH = status
  1382.         00h successful
  1383.         87h bad register number
  1384.     EAX, EBX, ECX, and EDX may be modified
  1385.     all other flags (except IF) may be modified
  1386. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1387.       interrupts if they were disabled before making the call
  1388.     the meanings of BL and BH on entry may be exchanged in future
  1389.       implementations
  1390. SeeAlso: AX=B188h
  1391. --------X-1AB109-----------------------------
  1392. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD
  1393.     AX = B109h
  1394.     BL = bus number
  1395.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1396.     DI = register number (0000h-00FFh)
  1397. Return: CF clear if successful
  1398.         CX = word read
  1399.     CF set on error
  1400.     AH = status
  1401.         00h successful
  1402.         87h bad register number
  1403.     EAX, EBX, ECX, and EDX may be modified
  1404.     all other flags (except IF) may be modified
  1405. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1406.       interrupts if they were disabled before making the call
  1407.     the meanings of BL and BH on entry may be exchanged in future
  1408.       implementations
  1409. SeeAlso: AX=B189h
  1410. --------X-1AB10A-----------------------------
  1411. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD
  1412.     AX = B10Ah
  1413.     BL = bus number
  1414.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1415.     DI = register number (0000h-00FFh)
  1416. Return: CF clear if successful
  1417.         ECX = dword read
  1418.     CF set on error
  1419.     AH = status
  1420.         00h successful
  1421.         87h bad register number
  1422.     EAX, EBX, ECX, and EDX may be modified
  1423.     all other flags (except IF) may be modified
  1424. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1425.       interrupts if they were disabled before making the call
  1426.     the meanings of BL and BH on entry may be exchanged in future
  1427.       implementations
  1428. SeeAlso: AX=B18Ah
  1429. --------X-1AB10B-----------------------------
  1430. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE
  1431.     AX = B10Bh
  1432.     BL = bus number
  1433.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1434.     DI = register number (0000h-00FFh)
  1435.     CL = byte to write
  1436. Return: CF clear if successful
  1437.     CF set on error
  1438.     AH = status
  1439.         00h successful
  1440.         87h bad register number
  1441.     EAX, EBX, ECX, and EDX may be modified
  1442.     all other flags (except IF) may be modified
  1443. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1444.       interrupts if they were disabled before making the call
  1445.     the meanings of BL and BH on entry may be exchanged in future
  1446.       implementations
  1447. SeeAlso: AX=B18Bh
  1448. --------X-1AB10C-----------------------------
  1449. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD
  1450.     AX = B10Ch
  1451.     BL = bus number
  1452.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1453.     DI = register number (multiple of 2 less than 0100h)
  1454.     CX = word to write
  1455. Return: CF clear if successful
  1456.     CF set on error
  1457.     AH = status
  1458.         00h successful
  1459.         87h bad register number
  1460.     EAX, EBX, ECX, and EDX may be modified
  1461.     all other flags (except IF) may be modified
  1462. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1463.       interrupts if they were disabled before making the call
  1464.     the meanings of BL and BH on entry may be exchanged in future
  1465.       implementations
  1466. SeeAlso: AX=B18Ch
  1467. --------X-1AB10D-----------------------------
  1468. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD
  1469.     AX = B10Dh
  1470.     BL = bus number
  1471.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1472.     DI = register number (multiple of 4 less than 0100h)
  1473.     ECX = dword to write
  1474. Return: CF clear if successful
  1475.     CF set on error
  1476.     AH = status
  1477.         00h successful
  1478.         87h bad register number
  1479.     EAX, EBX, ECX, and EDX may be modified
  1480.     all other flags (except IF) may be modified
  1481. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1482.       interrupts if they were disabled before making the call
  1483.     the meanings of BL and BH on entry may be exchanged in future
  1484.       implementations
  1485. SeeAlso: AX=B18Dh
  1486. --------X-1AB181-----------------------------
  1487. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK (32-bit)
  1488.     AX = B181h
  1489. Return: as for AX=B101h
  1490. SeeAlso: AX=B101h
  1491. --------X-1AB182-----------------------------
  1492. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE (32-bit)
  1493.     AX = B182h
  1494.     CX = device ID
  1495.     DX = vendor ID
  1496.     SI = device index (0-n)
  1497. Return: as for AX=B102h
  1498. SeeAlso: AX=B102h
  1499. --------X-1AB183-----------------------------
  1500. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE (32-bit)
  1501.     AX = B183h
  1502.     ECX = class code (bits 23-0)
  1503.     SI = device index (0-n)
  1504. Return: as for AX=B103h
  1505. SeeAlso: AX=B103h
  1506. --------X-1AB186-----------------------------
  1507. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS (32-bit)
  1508.     AX = B186h
  1509.     BL = bus number
  1510.     EDX = Special Cycle data
  1511. Return: as for AX=B106h
  1512. SeeAlso: AX=B106h
  1513. --------X-1AB188-----------------------------
  1514. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE (32-bit)
  1515.     AX = B188h
  1516.     BL = bus number
  1517.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1518.     DI = register number (0000h-00FFh)
  1519. Return: as for AX=B108h
  1520. SeeAlso: AX=B108h
  1521. --------X-1AB189-----------------------------
  1522. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD (32-bit)
  1523.     AX = B189h
  1524.     BL = bus number
  1525.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1526.     DI = register number (0000h-00FFh)
  1527. Return: as for AX=B109h
  1528. SeeAlso: AX=B109h
  1529. --------X-1AB18A-----------------------------
  1530. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD (32-bit)
  1531.     AX = B18Ah
  1532.     BL = bus number
  1533.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1534.     DI = register number (0000h-00FFh)
  1535. Return: as for AX=B10Ah
  1536. SeeAlso: AX=B10Ah
  1537. --------X-1AB18B-----------------------------
  1538. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE (32-bit)
  1539.     AX = B18Bh
  1540.     BL = bus number
  1541.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1542.     DI = register number (0000h-00FFh)
  1543.     CL = byte to write
  1544. Return: as for AX=B10Bh
  1545. SeeAlso: AX=B10Bh
  1546. --------X-1AB18C-----------------------------
  1547. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD (32-bit)
  1548.     AX = B18Ch
  1549.     BL = bus number
  1550.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1551.     DI = register number (multiple of 2 less than 0100h)
  1552.     CX = word to write
  1553. Return: as for AX=B10Ch
  1554. SeeAlso: AX=B10Ch
  1555. --------X-1AB18D-----------------------------
  1556. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD (32-bit)
  1557.     AX = B18Dh
  1558.     BL = bus number
  1559.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1560.     DI = register number (multiple of 4 less than 0100h)
  1561.     ECX = dword to write
  1562. Return: as for AX=B10Dh
  1563. SeeAlso: AX=B10Dh
  1564. --------c-1AC0-------------------------------
  1565. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  1566.     AH = C0h
  1567. Return: (see AH=A0h)
  1568. Notes:    this call is identical to AH=A0h
  1569.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1570.       as that is a licensed version of Disk Spool II
  1571. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  1572. --------U-1ACCCCBXCCCC-----------------------
  1573. INT 1A U - DATEFIX - INSTALLATION CHECK
  1574.     AX = CCCCh
  1575.     BX = CCCCh
  1576.     CX = 0000h
  1577. Return: CX = CCCCh if installed
  1578.         ES:BX -> original interrupt handler
  1579. Program: DATEFIX is a public-domain TSR to correct the date on AT&T 6300
  1580.       machines, where the realtime clock's calendar wraps after 1991
  1581. SeeAlso: AH=FEh,AH=FFh"AT&T"
  1582. --------c-1AD0-------------------------------
  1583. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  1584.     AH = D0h
  1585.     AL = function code
  1586.         01h enable spooler and despooler
  1587.         02h enable spooler only
  1588.         03h enable despooler at beginning of file
  1589.         04h disable the despooler
  1590.         05h disable the despooler and spooler
  1591.         06h clear the spool file
  1592.         08h inhibit the popup menu
  1593.         09h enable the popup menu
  1594.         0Ah ??? (called by Disk Spool's INT 21 handler)
  1595.         0Bh disable the spooler
  1596.         0Ch start despooler after last successfully printed document
  1597.         0Dh start despooler at the exact point where it last left off
  1598.         0Eh pop up the menu
  1599.         0Fh ???
  1600.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  1601.             when a program terminates)
  1602.         14h ???
  1603.         15h delete despool file and reset ???
  1604.         16h ??? (writes something to unknown file)
  1605.         17h ??? (writes something to despool file, then reads something
  1606.             else and ???)
  1607.         18h ??? (reads something from despool file, and then ???)
  1608.         19h ??? (creates/truncates spool file)
  1609.         20h clear file pointed to by the despooler
  1610.         21h ??? (writes something to unknown file)
  1611.         22h ??? (writes something to spool file if spooler/despooler using
  1612.             same file)
  1613.         23h ??? (opens/creates unknown file, then ???)
  1614.         30h ???
  1615.         31h ???
  1616.         32h beep
  1617.         33h append CRLF to spool file???
  1618.         34h ???
  1619.         35h ???
  1620.         36h ???
  1621.         37h append CRLF to spool file and start a new spool file???
  1622.         38h ???
  1623.         40h ??? (v4.05)
  1624.         41h ??? (v4.05)
  1625.         51h ??? (called by Disk Spool's INT 21 handler)
  1626.         52h ??? (called by Disk Spool's INT 21 handler)
  1627.         57h ???
  1628.         5Ah ??? (v4.05)
  1629.         5Bh ??? (v4.05)
  1630.         5Ch ??? (v4.05)
  1631. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1632.       as that is a licensed version of Disk Spool II
  1633. SeeAlso: AH=A0h,AH=ADh
  1634. --------c-1AE0-------------------------------
  1635. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  1636.     AH = E0h
  1637.     AL = subfunction
  1638.         01h enable spooler
  1639.         02h disable spooler
  1640.         03h enable despooler
  1641.         04h disable despooler
  1642.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1643. Return: AH = status
  1644.         00h successful
  1645.         F0h printer port not managed by Disk Spool II
  1646.         FFH failed
  1647. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1648.       as that is a licensed version of Disk Spool II
  1649. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  1650. --------c-1AE1-------------------------------
  1651. INT 1A - Disk Spool II v4.0x - GET STATUS
  1652.     AH = E1h
  1653.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1654. Return: AH = status
  1655.         00h successful
  1656.         CL = despooler state (00h disabled, 41h enabled)
  1657.         CH = spooler state (00h disabled, 41h enabled)
  1658.         DL = despooler activity (00h standing by, 41h printing)
  1659.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  1660.             or AutoDespool enabled)
  1661.         ES:SI -> ASCIZ name of current despool file
  1662.         ES:DI -> 3-byte file extension used by Disk Spool II
  1663.         F0h printer port not managed by Disk Spool II
  1664. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1665.       as that is a licensed version of Disk Spool II
  1666. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  1667. --------c-1AE2-------------------------------
  1668. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  1669.     AH = E2h
  1670.     AL = which
  1671.         01h first
  1672.         02h next (can only call after "first")
  1673.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1674. Return: AH = status
  1675.         00h successful
  1676.         ES:BX -> ASCIZ filename
  1677.         F0h no (more) spool files
  1678.         FFh failed
  1679. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1680.       as that is a licensed version of Disk Spool II
  1681. SeeAlso: AH=E0h,AH=E1h
  1682. --------c-1AE301-----------------------------
  1683. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  1684.     AX = E301h
  1685.     ES:BX -> ASCIZ filename (max 32 chars)
  1686. Return: AH = status
  1687.         00h successful
  1688.         ES:SI -> spool file status record (see below)
  1689.         F0h not a spool file
  1690.         FFh failed
  1691. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1692.       as that is a licensed version of Disk Spool II
  1693. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  1694.  
  1695. Format of spool file status record:
  1696. Offset    Size    Description
  1697.  00h    BYTE    hour of creation or last update
  1698.  01h    BYTE    minute of creation or last update
  1699.  02h    BYTE    year-1980 of creation or last update
  1700.  03h    BYTE    month of creation or last update
  1701.  04h    BYTE    day of creation or last update
  1702.  05h    BYTE    total number of copies to print
  1703.  06h    BYTE    number of copies already printed
  1704.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1705.  08h    BYTE    save status (00h delete after printing, 01h save)
  1706.  09h    BYTE    file status
  1707.         01h done printing, but being saved
  1708.         02h on hold
  1709.         03h queued for printing
  1710.         04h being spooled
  1711.         05h being despooled (i.e. printed)
  1712.  0Ah 16 BYTEs    ASCIZ description
  1713.  1Ah  2 WORDs    file size in bytes (high,low)
  1714.  1Eh  2 WORDs    bytes left to print (high,low)
  1715. --------c-1AE302-----------------------------
  1716. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  1717.     AX = E302h
  1718.     ES:BX -> ASCIZ filename (max 32 chars)
  1719.     ES:SI -> spool file status record (see AX=E301h)
  1720. Return: AH = status
  1721.         00h successful
  1722.         F0h not a spool file
  1723.         FFh failed
  1724. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1725.       as that is a licensed version of Disk Spool II
  1726. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  1727. --------c-1AE401-----------------------------
  1728. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  1729.     AX = E401h
  1730.     ES:BX -> ASCIZ filename (max 32 chars)
  1731.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1732. Return: AH = status
  1733.         00h successful
  1734.         FFh failed
  1735. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1736.       as that is a licensed version of Disk Spool II
  1737. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  1738. --------c-1AE402-----------------------------
  1739. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  1740.     AX = E402h
  1741.     ES:BX -> ASCIZ filename (max 32 chars)
  1742.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1743. Return: AH = status
  1744.         00h successful
  1745.         FFh failed
  1746. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1747.       as that is a licensed version of Disk Spool II
  1748. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  1749. --------c-1AE5-------------------------------
  1750. INT 1A U - Emulaser ELSPL.COM - ???
  1751.     AH = E5h
  1752.     ???
  1753. Return: ???
  1754. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  1755.       as part of Vertisoft's Emulaser PostScript emulator
  1756. SeeAlso: AH=A0h,INT 17/AH=03h
  1757. --------c-1AEE-------------------------------
  1758. INT 1A U - Disk Spool II v4.05 - ???
  1759.     AH = EEh
  1760.     AL = printer port???
  1761.     ???
  1762. Return: ???
  1763. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1764.       as that is a licensed version of Disk Spool II
  1765. SeeAlso: AH=E1h
  1766. --------U-1AF7-------------------------------
  1767. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  1768.     AH = F7h
  1769. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  1770.       time to correct for clock drift
  1771. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  1772.       version 1.1, but F7h is the function called by transient portion
  1773. SeeAlso: AH=F8h,AH=FFh"RighTime"
  1774. --------U-1AF8-------------------------------
  1775. INT 1A - RighTime v1.1 - ENABLE
  1776.     AH = F8h
  1777. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  1778.       time to correct for clock drift
  1779. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  1780.       TeSseRact program identifier based on its current state: "RighTime"
  1781.       when enabled, "RighTim"F7h when disabled.
  1782. SeeAlso: AH=F7h,AH=FFh"RighTime"
  1783. --------b-1AFE-------------------------------
  1784. INT 1A - AT&T 6300 - READ TIME AND DATE
  1785.     AH = FEh
  1786. Return: BX = day count (0 = Jan 1, 1984)
  1787.     CH = hour
  1788.     CL = minute
  1789.     DH = second
  1790.     DL = hundredths
  1791. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  1792. --------b-1AFF-------------------------------
  1793. INT 1A - AT&T 6300 - SET TIME AND DATE
  1794.     AH = FFh
  1795.     BX = day count (0 = Jan 1, 1984)
  1796.     CH = hour
  1797.     CL = minute
  1798.     DH = second
  1799.     DL = hundredths
  1800. Return: ???
  1801. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  1802. --------U-1AFF-------------------------------
  1803. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  1804.     AH = FFh
  1805. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  1806.       time to correct for clock drift
  1807. Note:    upon being permanently disabled, RighTime closes the file handle
  1808.       referencing its executable (which is updated with time correction
  1809.       information every two minutes while RighTime is enabled).
  1810. --------s-1AFF00-----------------------------
  1811. INT 1A - SND - INSTALLATION CHECK???
  1812.     AX = FF00h
  1813. Return: AL = version??? (02h)
  1814.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  1815. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  1816.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  1817.       command set
  1818. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  1819. --------s-1AFF01-----------------------------
  1820. INT 1A - SND - PAUSE
  1821.     AX = FF01h
  1822.     DX = number of clock ticks to delay
  1823. Return: AH = status
  1824.         00h successful
  1825.         01h SND busy
  1826. Notes:    if successful, execution returns to the caller after the delay expires;
  1827.       if SND is busy, execution returns immediately
  1828.     the IC v2.0 implementation of this API makes no special allowance for
  1829.       time rollover at midnight, which can cause the delay to be over one
  1830.       hour if this function is called just before the BIOS time count
  1831.       rolls over and the delay extends into the next day
  1832. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  1833. SeeAlso: INT E0/CL=BDh
  1834. --------s-1AFF02-----------------------------
  1835. INT 1A - SND - START SOUND
  1836.     AX = FF02h
  1837.     DX = frequency in Hertz (14h-FFFFh)
  1838. Return: AH = status
  1839.         00h successful
  1840.         01h SND busy
  1841. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  1842. --------s-1AFF03-----------------------------
  1843. INT 1A - SND - STOP SOUND
  1844.     AX = FF03h
  1845. Return: AH = status
  1846.         00h successful
  1847.         01h busy
  1848. Note:    turns off any sound currently being emitted by the PC's speaker unless
  1849.       SND is currently busy processing an API call (this includes
  1850.       background music).  Use AX=FF05h to stop the sound even if an API
  1851.       call is in progress.
  1852. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  1853. --------s-1AFF04-----------------------------
  1854. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  1855.     AX = FF04h
  1856.     DS:DX -> ASCIZ music string
  1857. Return: AH = status
  1858.         00h successful (music begins playing in background)
  1859.         01h busy
  1860. Note:    the music string accepted by SND is not the same as that accepted by
  1861.       BASIC and other programs which process music strings
  1862. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  1863. --------s-1AFF05-----------------------------
  1864. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  1865.     AX = FF05h
  1866. Return: AH = 00h (successful)
  1867. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  1868.       SND is currently busy, such as playing background music
  1869. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  1870. --------B-1B---------------------------------
  1871. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  1872. Desc:    this interrupt is automatically called when INT 09 determines that
  1873.       Control-Break has been pressed
  1874. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  1875.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  1876. SeeAlso: INT 23
  1877. --------B-1C---------------------------------
  1878. INT 1C - TIME - SYSTEM TIMER TICK
  1879. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  1880.       handler
  1881. Notes:    this is the preferred interrupt to chain when a program needs to be
  1882.       invoked regularly
  1883.     not available on NEC 9800-series PCs
  1884. SeeAlso: INT 08
  1885. --------B-1D---------------------------------
  1886. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  1887. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  1888. SeeAlso: INT 10/AH=00h
  1889.  
  1890. Format of video parameters:
  1891. Offset    Size    Description
  1892.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  1893.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  1894.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  1895.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  1896.  40h    WORD    bytes in video buffer for modes 00h and 01h
  1897.  42h    WORD    bytes in video buffer for modes 02h and 03h
  1898.  44h    WORD    bytes in video buffer for modes 04h and 05h
  1899.  46h    WORD    bytes in video buffer for modes 06h and 07h
  1900.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  1901.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  1902. --------B-1E---------------------------------
  1903. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  1904. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  1905. SeeAlso: INT 13/AH=0Fh,INT 41
  1906.  
  1907. Format of diskette parameter table:
  1908. Offset    Size    Description
  1909.  00h    BYTE    first specify byte
  1910.         bits 7-4: step rate
  1911.         bits 3-0: head unload time (0Fh = 240 ms)
  1912.  01h    BYTE    second specify byte
  1913.         bits 7-1: head load time (01h = 4 ms)
  1914.         bit    0: non-DMA mode (always 0)
  1915.  02h    BYTE    delay until motor turned off (in clock ticks)
  1916.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  1917.  04h    BYTE    sectors per track
  1918.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  1919.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  1920.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  1921.  08h    BYTE    format filler byte (default F6h)
  1922.  09h    BYTE    head settle time in milliseconds
  1923.  0Ah    BYTE    motor start time in 1/8 seconds
  1924. --------B-1F---------------------------------
  1925. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  1926. Desc:    this vector points at 1024 bytes of graphics data, 8 bytes for each
  1927.       character 80h-FFh
  1928. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  1929.       compatible BIOSes
  1930. SeeAlso: INT 10/AX=5000h,INT 43
  1931. --------J-1F90-------------------------------
  1932. INT 1F - NEC PC-9801 - COPY EXTENDED MEMORY
  1933.     AH = 90h
  1934.     ES:BX -> global descriptor table (see INT 15/AH=87h)
  1935.     CX = number of bytes to copy
  1936.     SI = 0000h
  1937.     DI = 0000h
  1938. Return: CF clear if successful
  1939.     CF set on error
  1940.     ???
  1941. SeeAlso: INT 15/AH=87h
  1942. --------O-20---------------------------------
  1943. INT 20 - Minix - SEND/RECEIVE MESSAGE
  1944.     AX = process ID of other process
  1945.     BX -> message
  1946.     CX = operation (1 send, 2 receive, 3 send&receive)
  1947. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  1948.       Tanenbaum
  1949. Note:    the message contains the system call number (numbered as in V7
  1950.       Unix(tm)) and the call parameters
  1951. --------D-20---------------------------------
  1952. INT 20 - DOS 1+ - TERMINATE PROGRAM
  1953.     CS = PSP segment
  1954. Return: never
  1955. Note:    (see INT 21/AH=00h)
  1956. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  1957. --------G-20---------------------------------
  1958. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  1959.     ???
  1960. Return: ???
  1961. SeeAlso: INT 21"COMTROL"
  1962. --------G-21---------------------------------
  1963. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  1964.     ???
  1965. Return: AX = first segment available for control program use
  1966. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  1967. --------D-2100-------------------------------
  1968. INT 21 - DOS 1+ - TERMINATE PROGRAM
  1969.     AH = 00h
  1970.     CS = PSP segment
  1971. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  1972.     execution continues at the address stored in INT 22 after DOS performs
  1973.       whatever cleanup it needs to do
  1974.     if the PSP is its own parent, the process's memory is not freed; if
  1975.       INT 22 additionally points into the terminating program, the
  1976.       process is effectively NOT terminated
  1977.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1978. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  1979. --------D-2101-------------------------------
  1980. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  1981.     AH = 01h
  1982. Return: AL = character read
  1983. Notes:    ^C/^Break are checked, and INT 23 executed if read
  1984.     character is echoed to standard output
  1985.     standard input is always the keyboard and standard output the screen
  1986.       under DOS 1.x, but they may be redirected under DOS 2+
  1987. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  1988. --------D-2102-------------------------------
  1989. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  1990.     AH = 02h
  1991.     DL = character to write
  1992. Return: AL = last character output (despite the official docs which state
  1993.         nothing is returned) (at least DOS 3.3-5.0)
  1994. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  1995.     standard output is always the screen under DOS 1.x, but may be
  1996.       redirected under DOS 2+
  1997.     the last character output will be the character in DL unless DL=09h
  1998.       on entry, in which case AL=20h as tabs are expanded to blanks
  1999. SeeAlso: AH=06h,AH=09h
  2000. --------D-2103-------------------------------
  2001. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  2002.     AH = 03h
  2003. Return: AL = character read
  2004. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2005.     STDAUX is usually the first serial port
  2006. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  2007. --------D-2104-------------------------------
  2008. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  2009.     AH = 04h
  2010.     DL = character to write
  2011. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2012.     STDAUX is usually the first serial port
  2013.     if STDAUX is busy, this function will wait until it becomes free
  2014. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  2015. --------D-2105-------------------------------
  2016. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  2017.     AH = 05h
  2018.     DL = character to print
  2019. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2020.     STDPRN is usually the first parallel port, but may be redirected under
  2021.       DOS 2+
  2022.     if the printer is busy, this function will wait
  2023. SeeAlso: INT 17/AH=00h
  2024. --------D-2106-------------------------------
  2025. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  2026.     AH = 06h
  2027.     DL = character (except FFh)
  2028. Return: AL = character output (despite official docs which state nothing is
  2029.         returned) (at least DOS 3.3-5.0)
  2030. Notes:    does not check ^C/^Break
  2031.     writes to standard output, which is always the screen under DOS 1.x,
  2032.       but may be redirected under DOS 2+
  2033. SeeAlso: AH=02h,AH=09h
  2034. --------D-2106--DLFF-------------------------
  2035. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  2036.     AH = 06h
  2037.     DL = FFh
  2038. Return: ZF set if no character available
  2039.         AL = 00h
  2040.     ZF clear if character available
  2041.         AL = character read
  2042. Notes:    ^C/^Break are NOT checked
  2043.     if the returned character is 00h, the user pressed a key with an
  2044.       extended keycode, which will be returned by the next call of this
  2045.       function
  2046.     this function reads from standard input, which is always the keyboard
  2047.       under DOS 1.x, but may be redirected under DOS 2+
  2048.     although the return of AL=00h when no characters are available is not
  2049.       documented, some programs rely on this behavior
  2050. SeeAlso: AH=0Bh
  2051. --------D-2107-------------------------------
  2052. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  2053.     AH = 07h
  2054. Return: AL = character read from standard input
  2055. Notes:    does not check ^C/^Break
  2056.     standard input is always the keyboard under DOS 1.x, but may be
  2057.       redirected under DOS 2+
  2058.     if the interim console flag is set (see AX=6301h), partially-formed
  2059.       double-byte characters may be returned
  2060. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  2061. --------D-2108-------------------------------
  2062. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  2063.     AH = 08h
  2064. Return: AL = character read from standard input
  2065. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  2066.     standard input is always the keyboard under DOS 1.x, but may be
  2067.       redirected under DOS 2+
  2068.     if the interim console flag is set (see AX=6301h), partially-formed
  2069.       double-byte characters may be returned
  2070. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  2071. --------D-2109-------------------------------
  2072. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  2073.     AH = 09h
  2074.     DS:DX -> '$'-terminated string
  2075. Return: AL = 24h (the '$' terminating the string, despite official docs which
  2076.         state that nothing is returned) (at least DOS 3.3-5.0)
  2077. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  2078.     standard output is always the screen under DOS 1.x, but may be
  2079.       redirected under DOS 2+
  2080.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  2081. SeeAlso: AH=02h,AH=06h"OUTPUT"
  2082. --------D-210A-------------------------------
  2083. INT 21 - DOS 1+ - BUFFERED INPUT
  2084.     AH = 0Ah
  2085.     DS:DX -> buffer (see below)
  2086. Return: buffer filled with user input
  2087. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  2088.     reads from standard input, which may be redirected under DOS 2+
  2089.     if the maximum buffer size (see below) is set to 00h, this call returns
  2090.       immediately without reading any input
  2091. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  2092.  
  2093. Format of input buffer:
  2094. Offset    Size    Description
  2095.  00h    BYTE    maximum characters buffer can hold
  2096.  01h    BYTE    (input) number of chars from last input which may be recalled
  2097.         (return) number of characters actually read, excluding CR
  2098.  02h  N BYTEs    actual characters read, including the final carriage return
  2099. --------K-210A00-----------------------------
  2100. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  2101.     AX = 0A00h
  2102.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  2103. Return: buffer offset 02h-05h filled with "Wced" if installed
  2104. Program: WCED is a free command-line editor and history utility by Stuart
  2105.       Russell
  2106. SeeAlso: AH=FFh"CED"
  2107. --------D-210B-------------------------------
  2108. INT 21 - DOS 1+ - GET STDIN STATUS
  2109.     AH = 0Bh
  2110. Return: AL = 00h if no character available
  2111.        = FFh if character is available
  2112. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  2113.     standard input is always the keyboard under DOS 1.x, but may be
  2114.       redirected under DOS 2+
  2115.     if the interim console flag is set (see AX=6301h), this function
  2116.       returns AL=FFh if a partially-formed double-byte character is
  2117.       available
  2118. SeeAlso: AH=06h"INPUT",AX=4406h
  2119. --------v-210B56-----------------------------
  2120. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  2121.     AX = 0B56h
  2122. Return: AX = 4952h if resident
  2123. SeeAlso: AX=0D20h,INT 12/AX=4350h/BX=4920h
  2124. --------D-210C-------------------------------
  2125. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  2126.     AH = 0Ch
  2127.     AL = STDIN input function to execute after flushing buffer
  2128.     other registers as appropriate for the input function
  2129. Return: as appropriate for the specified input function
  2130. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  2131.       no input is attempted
  2132. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  2133. --------D-210D-------------------------------
  2134. INT 21 - DOS 1+ - DISK RESET
  2135.     AH = 0Dh
  2136. Return: (DOS 6 only) CF clear (earlier versions preserve CF)
  2137. Notes:    This function writes all modified disk buffers to disk, but does not
  2138.       update the directory information (that is only done when files are
  2139.       closed or a SYNC call is issued)
  2140. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  2141. --------v-210D20-----------------------------
  2142. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  2143.     AX = 0D20h
  2144. Return: AX = 1971h if resident
  2145. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  2146. --------D-210E-------------------------------
  2147. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  2148.     AH = 0Eh
  2149.     DL = new default drive (00h = A:, 01h = B:, etc)
  2150. Return: AL = number of potentially valid drive letters
  2151. Notes:    under Novell NetWare, the return value is always 32, the number of
  2152.       drives that NetWare supports
  2153.     under DOS 3+, the return value is the greatest of 5, the value of
  2154.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  2155.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  2156.       may be accessed as either A: or B:
  2157.     otherwise, the return value is the highest drive actually present
  2158.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  2159.       and 3+ a maximum of 26 drives
  2160. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  2161. --------v-210E--DLAD-------------------------
  2162. INT 21 U - Novell DOS 7 - SDRes v27.03 - INSTALLATION CHECK
  2163.     AH = 0Eh
  2164.     DL = ADh
  2165. Return: AL = BAh if installed
  2166. Program: SDRes is the resident portion of the Search&Destroy antiviral by
  2167.       Fifth Generation Systems, as bundled with Novell DOS 7
  2168. SeeAlso: AH=0Eh/DL=AEh,AH=0Eh/DL=AFh,AH=4Ah/BX=00B6h,INT 13/AX=A759h
  2169. --------v-210E--DLAD-------------------------
  2170. INT 21 U - Novell DOS 7 - SDRes v27.03 - CLEAR ??? FLAG
  2171.     AH = 0Eh
  2172.     DL = ADh
  2173. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AFh,INT 13/AX=A759h
  2174. --------v-210E--DLAF-------------------------
  2175. INT 21 U - Novell DOS 7 - SDRes v27.03 - SET ??? FLAG
  2176.     AH = 0Eh
  2177.     DL = AFh
  2178. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AEh,INT 13/AX=A759h
  2179. --------D-210F-------------------------------
  2180. INT 21 - DOS 1+ - OPEN FILE USING FCB
  2181.     AH = 0Fh
  2182.     DS:DX -> unopened File Control Block (see below)
  2183. Return: AL = status
  2184.         00h successful
  2185.         FFh file not found or access denied
  2186. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  2187.     an unopened FCB has the drive, filename, and extension fields filled
  2188.       in and all other bytes cleared
  2189.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2190.     DR-DOS checks password attached with AX=4303h
  2191. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  2192. SeeAlso: AH=10h,AH=16h,AH=3Dh,4303h
  2193.  
  2194. Format of File Control Block:
  2195. Offset    Size    Description
  2196.  -7    BYTE    extended FCB if FFh
  2197.  -6   5 BYTEs    reserved
  2198.  -1    BYTE    file attribute if extended FCB
  2199.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  2200.  01h  8 BYTEs    blank-padded file name
  2201.  09h  3 BYTEs    blank-padded file extension
  2202.  0Ch    WORD    current block number
  2203.  0Eh    WORD    logical record size
  2204.  10h    DWORD    file size
  2205.  14h    WORD    date of last write (see AX=5700h)
  2206.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  2207.  18h  8 BYTEs    reserved (see below)
  2208.  20h    BYTE    record within current block
  2209.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  2210.         byte is omitted)
  2211. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  2212.       offset -7, rather than the address of the drive number field
  2213.  
  2214. Format of reserved field for DOS 1.0:
  2215. Offset    Size    Description
  2216.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  2217.         ID)
  2218.  18h    WORD    number of first cluster in file
  2219.  1Ah    WORD    current absolute cluster number on disk
  2220.  1Ch    WORD    current relative cluster number within file
  2221.         (0 = first cluster of file, 1 = second cluster, etc.)
  2222.  1Eh    BYTE    dirty flag (00h = not dirty)
  2223.  1Fh    BYTE    unused
  2224.  
  2225. Format of reserved field for DOS 1.10-1.25:
  2226. Offset    Size    Description
  2227.  18h    BYTE    bit 7: set if logical device
  2228.         bit 6: not dirty
  2229.         bits 5-0: disk number or logical device ID
  2230.  19h    WORD    starting cluster number on disk
  2231.  1Bh    WORD    current absolute cluster number on disk
  2232.  1Dh    WORD    current relative cluster number within file
  2233.  1Fh    BYTE    unused
  2234.  
  2235. Format of reserved field for DOS 2.x:
  2236. Offset    Size    Description
  2237.  18h    BYTE    bit 7: set if logical device
  2238.         bit 6: set if open???
  2239.         bits 5-0: ???
  2240.  19h    WORD    starting cluster number on disk
  2241.  1Bh    WORD    ???
  2242.  1Dh    BYTE    ???
  2243.  1Eh    BYTE    ???
  2244.  1Fh    BYTE    ???
  2245.  
  2246. Format of reserved field for DOS 3.x:
  2247. Offset    Size    Description
  2248.  18h    BYTE    number of system file table entry for file
  2249.  19h    BYTE    attributes
  2250.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  2251.               01 = SHARE.EXE not loaded, character device
  2252.               10 = SHARE.EXE loaded, remote file
  2253.               11 = SHARE.EXE loaded, local file or device
  2254.         bits 5-0: low six bits of device attribute word
  2255. ---SHARE.EXE loaded, local file---
  2256.  1Ah    WORD    starting cluster of file on disk
  2257.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record (see AH=52h)
  2258.  1Eh    BYTE    file attribute
  2259.  1Fh    BYTE    ???
  2260. ---SHARE.EXE loaded, remote file---
  2261.  1Ah    WORD    number of sector containing directory entry
  2262.  1Ch    WORD    relative cluster within file of last cluster accessed
  2263.  1Eh    BYTE    absolute cluster number of last cluster accessed
  2264.  1Fh    BYTE    ???
  2265. ---SHARE.EXE not loaded---
  2266.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  2267.  1Bh    WORD    starting cluster of file
  2268.  1Dh    WORD    number of sector containing directory entry
  2269.  1Fh    BYTE    number of directory entry within sector
  2270. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  2271.       of the device driver header, then the BYTE at 1Ah is overwritten.
  2272.  
  2273. Format of reserved field for DOS 5.0:
  2274. Offset    Size    Description
  2275.  18h    BYTE    number of system file table entry for file
  2276.  19h    BYTE    attributes
  2277.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  2278.               01 = SHARE.EXE not loaded, character device
  2279.               10 = SHARE.EXE loaded, remote file
  2280.               11 = SHARE.EXE loaded, local file or device
  2281.         bits 5-0: low six bits of device attribute word
  2282. ---SHARE.EXE loaded, local file---
  2283.  1Ah    WORD    starting cluster of file on disk
  2284.  1Ch    WORD    unique sequence number of sharing record
  2285.  1Eh    BYTE    file attributes
  2286.  1Fh    BYTE    unused???
  2287. ---SHARE.EXE loaded, remote file---
  2288.  1Ah    WORD    network handle
  2289.  1Ch    DWORD    network ID
  2290. ---SHARE not loaded, local device---
  2291.  1Ah    DWORD    pointer to device driver header
  2292.  1Eh  2 BYTEs    unused???
  2293. ---SHARE not loaded, local file---
  2294.  1Ah    BYTE    extra info
  2295.         bit 7: read-only attribute from SFT
  2296.         bit 6: archive attribute from SFT
  2297.         bits 5-0: high bits of sector number
  2298.  1Bh    WORD    starting cluster of file
  2299.  1Dh    WORD    low word of sector number containing directory entry
  2300.  1Fh    BYTE    number of directory entry within sector
  2301. --------D-2110-------------------------------
  2302. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  2303.     AH = 10h
  2304.     DS:DX -> File Control Block (see AH=0Fh)
  2305. Return: AL = status
  2306.         00h successful
  2307.         FFh failed
  2308. Notes:    a successful close forces all disk buffers used by the file to be
  2309.       written and the directory entry to be updated
  2310.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2311. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  2312. --------D-2111-------------------------------
  2313. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  2314.     AH = 11h
  2315.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  2316. Return: AL = status
  2317.         00h successful
  2318.         [DTA] unopened FCB for first matching file
  2319.         FFh no matching filename, or bad FCB
  2320. Notes:    the type of the returned FCB depends on whether the input FCB was a
  2321.       normal or an extended FCB
  2322.     the data returned in the DTA is actually the drive number (or extended
  2323.       FCB header and drive number) followed by the file's directory entry
  2324.       (see below); this format happens to be compatible with an unopened
  2325.       FCB
  2326.     for extended FCBs with search attribute 08h, the volume label (if any)
  2327.       will be returned even if the current directory is not the root dir.
  2328.     DOS 3+ also allows the '*' wildcard
  2329.     the search FCB must not be modified if AH=12h will be used to continue
  2330.       searching; DOS 3.3 has set the following parts of the FCB:
  2331.          0Ch    BYTE    ???
  2332.          0Dh    WORD    directory entry number of matching file
  2333.          0Fh    WORD    cluster number of current directory
  2334.          11h  4 BYTEs    ???
  2335.          15h    BYTE    drive number (1=A:)
  2336.     this function is used by many copy protection schemes to obtain the
  2337.       starting cluster of a file
  2338. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  2339.  
  2340. Format of directory entry:
  2341. Offset    Size    Description
  2342.  00h  8 BYTEs    blank-padded filename
  2343.  08h  3 BYTEs    blank-padded file extension
  2344.  0Bh    BYTE    attributes
  2345.  0Ch 10 BYTEs    reserved
  2346.         used by DR-DOS to store file password
  2347.  16h    WORD    time of creation or last update (see AX=5700h)
  2348.  18h    WORD    date of creation or last update (see AX=5700h)
  2349.  1Ah    WORD    starting cluster number
  2350.  1Ch    DWORD    file size
  2351. --------D-2112-------------------------------
  2352. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  2353.     AH = 12h
  2354.     DS:DX -> unopened FCB (see AH=0Fh)
  2355. Return: AL = status
  2356.         00h successful
  2357.         [DTA] = unopened FCB
  2358.         FFh no more matching filenames
  2359. Note:    (see AH=11h)
  2360.     assumes that successful FindFirst executed on search FCB before call
  2361. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  2362. --------D-2113-------------------------------
  2363. INT 21 - DOS 1+ - DELETE FILE USING FCB
  2364.     AH = 13h
  2365.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  2366.         deletion ('?' wildcards allowed)
  2367. Return: AL = status
  2368.         00h one or more files successfully deleted
  2369.         FFh no matching files or all were read-only or locked
  2370. Notes:    DOS 1.25+ deletes everything in the current directory (including
  2371.       subdirectories) and sets the first byte of the name to 00h (entry
  2372.       never used) instead of E5h if called on an extended FCB with
  2373.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  2374.       2 for DOS 1.x).  This may have originally been an optimization to
  2375.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  2376.       the directory search upon encountering a never-used entry), but can
  2377.       corrupt the filesystem under DOS 2+ because subdirectories are
  2378.       removed without deleting the files they contain.
  2379.     currently-open files should not be deleted
  2380.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  2381.       Novell NetWare does not
  2382. SeeAlso: AH=41h,INT 2F/AX=1113h
  2383. --------D-2114-------------------------------
  2384. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  2385.     AH = 14h
  2386.     DS:DX -> opened FCB (see AH=0Fh)
  2387. Return: AL = status
  2388.         00h successful
  2389.         01h end of file (no data)
  2390.         02h segment wrap in DTA
  2391.         03h end of file, partial record read
  2392.     [DTA] = record read from file
  2393. Notes:    reads a record of the size specified in the FCB beginning at the
  2394.       current file position, then updates the current block and current
  2395.       record fields in the FCB
  2396.     if a partial record was read, it is zero-padded to the full size
  2397.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2398. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  2399. --------D-2115-------------------------------
  2400. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  2401.     AH = 15h
  2402.     DS:DX -> opened FCB (see AH=0Fh)
  2403.     [DTA] = record to write
  2404. Return: AL = status
  2405.         00h successful
  2406.         01h disk full
  2407.         02h segment wrap in DTA
  2408. Notes:    writes a record of the size specified in the FCB beginning at the
  2409.       current file position, then updates the current block and current
  2410.       record fields in the FCB
  2411.     if less than a full sector is written, the data is placed in a DOS
  2412.       buffer to be written out at a later time
  2413.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2414. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  2415. --------D-2116-------------------------------
  2416. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  2417.     AH = 16h
  2418.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  2419. Return: AL = status
  2420.         00h successful
  2421.         FFh directory full or file exists and is read-only or locked
  2422. Notes:    if file already exists, it is truncated to zero length
  2423.     if an extended FCB is used, the file is given the attribute in the
  2424.       FCB; this is how to create a volume label in the disk's root dir
  2425.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2426. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  2427. --------D-2117-------------------------------
  2428. INT 21 - DOS 1+ - RENAME FILE USING FCB
  2429.     AH = 17h
  2430.     DS:DX -> modified FCB (see also AH=0Fh)
  2431.         the old filename ('?' wildcards OK) is in the standard location
  2432.         while the new filename ('?' wildcards OK) is stored in the 11
  2433.         bytes beginning at offset 11h
  2434. Return: AL = status
  2435.         00h successfully renamed
  2436.         FFh no matching files,file is read-only, or new name already exists
  2437. Notes:    subdirectories may be renamed using an extended FCB with the
  2438.       appropriate attribute, as may volume labels
  2439.     DR-DOS checks password attached with AX=4303h before permitting rename
  2440. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  2441. --------D-2118-------------------------------
  2442. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2443.     AH = 18h
  2444. Return: AL = 00h
  2445. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  2446.       which is meaningless under MS-DOS
  2447. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  2448. --------D-2119-------------------------------
  2449. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  2450.     AH = 19h
  2451. Return: AL = drive (00h = A:, 01h = B:, etc)
  2452. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  2453.       from a particular location every time it starts a command to
  2454.       determine when to issue an automatic EOJ
  2455. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  2456. --------D-211A-------------------------------
  2457. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  2458.     AH = 1Ah
  2459.     DS:DX -> Disk Transfer Area (DTA)
  2460. Notes:    the DTA is set to PSP:0080h when a program is started
  2461.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  2462. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  2463. --------D-211B-------------------------------
  2464. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  2465.     AH = 1Bh
  2466. Return: AL = sectors per cluster (allocation unit)
  2467.     CX = bytes per sector
  2468.     DX = total number of clusters
  2469.     DS:BX -> media ID byte (see below)
  2470. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  2471.       versions return a pointer to a copy of the FAT's ID byte
  2472. SeeAlso: AH=1Ch,AH=36h
  2473.  
  2474. Values for media ID byte:
  2475.  FFh    floppy, double-sided, 8 sectors per track (320K)
  2476.  FEh    floppy, single-sided, 8 sectors per track (160K)
  2477.  FDh    floppy, double-sided, 9 sectors per track (360K)
  2478.  FCh    floppy, single-sided, 9 sectors per track (180K)
  2479.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  2480.  F8h    hard disk
  2481.  F0h    other
  2482. --------D-211C-------------------------------
  2483. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  2484.     AH = 1Ch
  2485.     DL = drive (00h = default, 01h = A:, etc)
  2486. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  2487.     CX = bytes per sector
  2488.     DX = total number of clusters
  2489.     DS:BX -> media ID byte (see AH=1Bh)
  2490. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  2491.       versions return a pointer to a copy of the FAT's ID byte
  2492.     on a DBLSPACE drive, the total number of clusters is based on the
  2493.       estimated compression ratio
  2494. SeeAlso: AH=1Bh,AH=36h
  2495. --------D-211D-------------------------------
  2496. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2497.     AH = 1Dh
  2498. Return: AL = 00h
  2499. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  2500.       drives", which is meaningless under MS-DOS
  2501. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  2502. --------D-211E-------------------------------
  2503. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2504.     AH = 1Eh
  2505. Return: AL = 00h
  2506. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  2507.      meaningless under MS-DOS 1.x
  2508. SeeAlso: AH=18h,AH=1Dh,AH=20h
  2509. --------D-211F-------------------------------
  2510. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  2511.     AH = 1Fh
  2512. Return: AL = status
  2513.         00h successful
  2514.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  2515.             AH=32h for DOS 2+)
  2516.         FFh invalid drive
  2517. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  2518.       only the DOS 4+ version of the DPB has been documented
  2519. SeeAlso: AH=32h
  2520.  
  2521. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  2522. Offset    Size    Description
  2523.  00h    BYTE    sequential device ID
  2524.  01h    BYTE    logical drive number (0=A:)
  2525.  02h    WORD    bytes per sector
  2526.  04h    BYTE    highest sector number within a cluster
  2527.  05h    BYTE    shift count to convert clusters into sectors
  2528.  06h    WORD    starting sector number of first FAT
  2529.  08h    BYTE    number of copies of FAT
  2530.  09h    WORD    number of directory entries
  2531.  0Bh    WORD    number of first data sector
  2532.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  2533.  0Fh    BYTE    sectors per FAT
  2534.  10h    WORD    starting sector of directory
  2535.  12h    WORD    address of allocation table
  2536. Note:    the DOS 1.0 table is the same except that the first and last fields
  2537.       are missing; see INT 21/AH=32h for the DOS 2+ version
  2538. --------D-2120-------------------------------
  2539. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2540.     AH = 20h
  2541. Return: AL = 00h
  2542. Note:    corresponds to the CP/M BDOS function "get/set default user
  2543.       (sublibrary) number", which is meaningless under MS-DOS
  2544. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  2545. --------D-2121-------------------------------
  2546. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  2547.     AH = 21h
  2548.     DS:DX -> opened FCB (see AH=0Fh)
  2549. Return: AL = status
  2550.         00h successful
  2551.         01h end of file, no data read
  2552.         02h segment wrap in DTA, no data read
  2553.         03h end of file, partial record read
  2554.     [DTA] = record read from file
  2555. Notes:    the record is read from the current file position as specified by the
  2556.       random record and record size fields of the FCB
  2557.     the file position is not updated after reading the record
  2558.     if a partial record is read, it is zero-padded to the full size
  2559.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2560. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  2561. --------D-2122-------------------------------
  2562. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  2563.     AH = 22h
  2564.     DS:DX -> opened FCB (see AH=0Fh)
  2565.     [DTA] = record to write
  2566. Return: AL = status
  2567.         00h successful
  2568.         01h disk full
  2569.         02h segment wrap in DTA
  2570. Notes:    the record is written to the current file position as specified by the
  2571.       random record and record size fields of the FCB
  2572.     the file position is not updated after writing the record
  2573.     if the record is located beyond the end of the file, the file is
  2574.       extended but the intervening data remains uninitialized
  2575.     if the record only partially fills a disk sector, it is copied to a
  2576.       DOS disk buffer to be written out to disk at a later time
  2577.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2578. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  2579. --------D-2123-------------------------------
  2580. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  2581.     AH = 23h
  2582.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  2583. Return: AL = status
  2584.         00h successful (matching file found)
  2585.         FCB random record field filled with size in records, rounded up
  2586.         to next full record
  2587.         FFh failed (no matching file found)
  2588. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2589.     MS-DOS returns nonsense if the FCB record number field is set to a very
  2590.       large positive number, and status FFh if negative; DR-DOS returns the
  2591.       correct file size in both cases
  2592. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  2593. SeeAlso: AH=42h
  2594. --------D-2124-------------------------------
  2595. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  2596.     AH = 24h
  2597.     DS:DX -> opened FCB (see AH=0Fh)
  2598. Notes:    computes the random record number corresponding to the current record
  2599.       number and record size, then stores the result in the FCB
  2600.     normally used when switching from sequential to random access
  2601.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2602. SeeAlso: AH=21h,AH=27h,AH=42h
  2603. --------D-2125-------------------------------
  2604. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  2605.     AH = 25h
  2606.     AL = interrupt number
  2607.     DS:DX -> new interrupt handler
  2608. Notes:    this function is preferred over direct modification of the interrupt
  2609.       vector table
  2610.     some DOS extenders place an API on this function, as it is not
  2611.       directly meaningful in protected mode
  2612.     under DR-DOS 5.0+, this function does not use any of the DOS-internal
  2613.       stacks and may thus be called at any time
  2614.     Novell NetWare (except the new DOS Requester) monitors the offset of
  2615.       any INT 24 set, and if equal to the value at startup, substitutes
  2616.       its own handler to allow handling of network errors; this introduces
  2617.       the potential bug that any program whose INT 24 handler offset
  2618.       happens to be the same as COMMAND.COM's will not have its INT 24
  2619.       handler installed
  2620. SeeAlso: AX=2501h,AH=35h
  2621. --------E-212501-----------------------------
  2622. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  2623.     AX = 2501h
  2624.     SS = application's original SS or DS (FlashTek X-32VM)
  2625. Return: CF clear if successful
  2626.     CF set on error
  2627.         caller is operating on X-32 stack (FlashTek X-32VM)
  2628. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  2629.       system calls.     Only available when directly using 386/DOS-Extender or
  2630.       a compatible DOS extender, or when using a product that was created
  2631.       using 386-DOS/Extender or a compatible
  2632.     this function is also supported by FlashTek X-32VM
  2633. SeeAlso: AH=30h"Phar Lap"
  2634. --------E-212502-----------------------------
  2635. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  2636.     AX = 2502h
  2637.     CL = interrupt number
  2638. Return: CF clear
  2639.     ES:EBX = CS:EIP of protected-mode interrupt handler
  2640. Note:    this function is also supported by FlashTek X-32VM
  2641. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  2642. --------E-212503-----------------------------
  2643. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  2644.     AX = 2503h
  2645.     CL = interrupt number
  2646. Return: CF clear
  2647.     EBX = CS:IP of real-mode interrupt handler
  2648. Note:    this function is also supported by FlashTek X-32VM
  2649. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  2650. --------E-212504-----------------------------
  2651. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  2652.     AX = 2504h
  2653.     CL = interrupt number
  2654.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2655. Return: CF clear
  2656. Note:    this function is also supported by FlashTek X-32VM
  2657. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  2658. --------E-212505-----------------------------
  2659. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  2660.     AX = 2505h
  2661.     CL = interrupt number
  2662.     EBX = CS:IP of real-mode interrupt handler
  2663. Return: CF clear
  2664. Note:    this function is also supported by FlashTek X-32VM
  2665. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  2666. --------E-212506-----------------------------
  2667. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  2668.     AX = 2506h
  2669.     CL = interrupt number
  2670.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2671. Return: CF clear
  2672. Notes:    this function modifies both the real-mode low-memory interrupt
  2673.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  2674.     interrupts occurring in real mode are resignaled in protected mode
  2675.     this function is also supported by FlashTek X-32VM
  2676. --------E-212507-----------------------------
  2677. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  2678.     AX = 2507h
  2679.     CL = interrupt number
  2680.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2681.     EBX = CS:IP of real-mode interrupt handler
  2682. Return: CF clear
  2683. Notes:    interrupts are disabled until both vectors have been modified
  2684.     this function is also supported by FlashTek X-32VM
  2685. SeeAlso: AX=2504h,AX=2505h
  2686. --------E-212508-----------------------------
  2687. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  2688.     AX = 2508h
  2689.     BX = segment selector
  2690. Return: CF clear if successful
  2691.         ECX = linear base address of segment
  2692.     CF set if invalid segment selector
  2693. Note:    this function is also supported by FlashTek X-32VM
  2694. SeeAlso: AX=2509h
  2695. --------E-212509-----------------------------
  2696. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  2697.     AX = 2509h
  2698.     EBX = linear address to convert
  2699. Return: CF clear if successful
  2700.         ECX = physical address (carry flag clear)
  2701.     CF set if linear address not mapped in page tables
  2702. SeeAlso: AX=2508h
  2703. --------E-212509-----------------------------
  2704. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  2705.     AX = 2509h
  2706. Return: CF clear
  2707.     EAX high word = default DS
  2708.     AX = alias for 16-bit data segment
  2709.     BX = real mode code segment
  2710.     EDX high word = selector covering full 4GB address space
  2711.     DX = default SS
  2712.     ESI high word = PSP selector
  2713.     SI = environment selector
  2714. --------E-21250A-----------------------------
  2715. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  2716.     AX = 250Ah
  2717.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  2718.          to modify
  2719.     EBX = physical base address of memory to map (multiple of 4K)
  2720.     ECX = number of physical 4K pages to map
  2721. Return: CF clear if successful
  2722.         EAX = 32-bit offset in segment of mapped memory
  2723.     CF set on error
  2724.         EAX = error code
  2725.         08h insufficient memory to create page tables
  2726.         09h invalid segment selector
  2727. SeeAlso: INT 31/AX=0800h
  2728. --------E-21250C-----------------------------
  2729. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  2730.     AX = 250Ch
  2731. Return: CF clear
  2732.     AL = base interrupt vector for IRQ0-IRQ7
  2733.     AH = base interrupt vector for IRQ8-IRQ15
  2734.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  2735. Note:    this function is also supported by FlashTek X-32VM
  2736. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  2737. --------E-21250D-----------------------------
  2738. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  2739.     AX = 250Dh
  2740. Return: CF clear
  2741.     EAX = CS:IP of real-mode callback procedure that will call through
  2742.         from real mode to a protected-mode routine
  2743.     EBX = 32-bit real-mode address of intermode call data buffer
  2744.     ECX = size in bytes of intermode call data buffer
  2745.     ES:EDX = protected-mode address of intermode call data buffer
  2746. Notes:    this function is also supported by FlashTek X-32VM
  2747.     X-32VM guarantees the intermode buffer to be at least 4 KB
  2748. SeeAlso: AX=250Eh
  2749.  
  2750. Call real-mode callback with:
  2751.     STACK:    DWORD    offset to protected-mode code
  2752.         WORD    placeholder for protected-mode CS
  2753.         DWORD    pointer to selector structure (see below)
  2754.             or 0000h:0000h for defaults
  2755.         var    parameters for protected-mode procedure
  2756. Return: via FAR return
  2757.  
  2758. Format of selector structure:
  2759. Offset    Size    Description
  2760.  00h    WORD    protected-mode GS selector
  2761.  02h    WORD    protected-mode FS selector
  2762.  04h    WORD    protected-mode ES selector
  2763.  06h    WORD    protected-mode DS selector
  2764. --------E-21250E-----------------------------
  2765. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  2766.     AX = 250Eh
  2767.     EBX = CS:IP of real-mode procedure to call
  2768.     ECX = number of two-byte words to copy from protected-mode stack
  2769.           to real-mode stack
  2770. Return: CF clear if successful
  2771.         all segment registers unchanged
  2772.         all general registers contain values set by real-mode procedure
  2773.         all other flags set as they were left by real-mode procedure
  2774.         stack unchanged
  2775.     CF set on error
  2776.         EAX = error code
  2777.         01h not enough real-mode stack space
  2778. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  2779.       call will fail if ECX > 0000003Fh
  2780. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  2781. --------E-21250F-----------------------------
  2782. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  2783.     AX = 250Fh
  2784.     ES:EBX = 48-bit protected-mode address to convert
  2785.     ECX = 00000000h or length of data in bytes
  2786. Return: CF clear if successful (address < 1MB and contiguous)
  2787.         ECX = 32-bit real-mode MS-DOS address
  2788.     CF set on error (address >= 1MB or not contiguous)
  2789.         ECX = linear address
  2790. Note:    this function is also supported by FlashTek X-32VM
  2791. SeeAlso: AX=2510h
  2792. --------E-212510-----------------------------
  2793. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  2794.     AX = 2510h
  2795.     EBX = CS:IP of real-mode procedure to call
  2796.     ECX = number of two-byte words to copy to protected-mode stack to
  2797.           real-mode stack
  2798.     DS:EDX -> pointer to parameter block (see below)
  2799. Return: CF clear if successful
  2800.         all segment registers unchanged,
  2801.         EDX unchanged
  2802.         all other general registers contain values set by real-mode proc
  2803.         all other flags are set as they were left by real-mode procedure
  2804.         real-mode register values are returned in the parameter block
  2805.     CF set on error
  2806.         EAX = error code
  2807.         01h not enough real-mode stack space
  2808. Note:    unlike most of the preceding 25xxh functions, this one is not
  2809.       supported by FlashTek X-32VM
  2810. SeeAlso: AX=250Eh,AX=250Fh
  2811.  
  2812. Format of parameter block:
  2813. Offset    Size    Description
  2814.  00h    WORD    real-mode DS value
  2815.  02h    WORD    real-mode ES value
  2816.  04h    WORD    real-mode FS value
  2817.  06h    WORD    real-mode GS value
  2818.  08h    DWORD    real-mode EAX value
  2819.  0Ch    DWORD    real-mode EBX value
  2820.  10h    DWORD    real-mode ECX value
  2821.  14h    DWORD    real-mode EDX value
  2822. --------E-212511-----------------------------
  2823. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  2824.     AX = 2511h
  2825.     DS:EDX -> parameter block (see below)
  2826. Return: all segment registers unchanged
  2827.     EDX unchanged
  2828.     all other registers contain values set by the real-mode int handler
  2829.     the flags are set as they were left by the real-mode interrupt handler
  2830.     real-mode register values are returned in the parameter block
  2831. Note:    this function is also supported by FlashTek X-32VM
  2832. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  2833.  
  2834. Format of parameter block:
  2835. Offset    Size    Description
  2836.  00h    WORD    interrupt number
  2837.  02h    WORD    real-mode DS value
  2838.  04h    WORD    real-mode ES value
  2839.  06h    WORD    real-mode FS value
  2840.  08h    WORD    real-mode GS value
  2841.  0Ah    DWORD    real-mode EAX value
  2842.  0Eh    DWORD    real-mode EDX value
  2843. Note: all other real-mode values set from protected-mode registers
  2844. --------E-212512-----------------------------
  2845. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  2846.     AX = 2512h
  2847.     DS:EDX -> pointer to ASCIZ program name
  2848.     ES:EBX -> pointer to parameter block (see below)
  2849.     ECX = size in bytes of LDT buffer
  2850. Return: CF clear if successful
  2851.         EAX = number of segment descriptors in LDT
  2852.     CF set on error
  2853.         EAX = error code
  2854.         02h file not found or path invalid
  2855.         05h access denied
  2856.         08h insufficient memory
  2857.         0Ah environment invalid
  2858.         0Bh invalid file format
  2859.         80h LDT too small
  2860. SeeAlso: AX=2517h
  2861.  
  2862. Format of parameter block:
  2863. Offset    Size    Description
  2864. Input:
  2865.  00h    DWORD    32-bit offset of environment string
  2866.  04h    WORD    segment of environment string
  2867.  06h    DWORD    32-bit offset of command-tail string
  2868.  0Ah    WORD    segment of command-tail string
  2869.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  2870.  10h    WORD    segment of LDT buffer
  2871. Output:
  2872.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  2873.  14h    WORD    real/protected mode flag
  2874.         0000h  real mode
  2875.         0001h  protected mode
  2876.  16h    DWORD    initial EIP value
  2877.  1Ah    WORD    initial CS value
  2878.  1Ch    DWORD    initial ESP value
  2879.  20h    WORD    initial SS value
  2880.  22h    WORD    initial DS value
  2881.  24h    WORD    initial ES value
  2882.  26h    WORD    initial FS value
  2883.  28h    WORD    initial GS value
  2884. --------E-212513-----------------------------
  2885. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  2886.     AX = 2513h
  2887.     BX = segment selector of descriptor in GDT or LDT
  2888.     CL = access-rights byte for alias descriptor
  2889.     CH = use-type bit (USE16 or USE32) for alias descriptor
  2890. Return: CF clear if successful
  2891.         AX = segment selector for created alias
  2892.     CF set on error
  2893.         EAX = error code
  2894.         08h insufficient memory (can't grow LDT)
  2895.         09h invalid segment selector in BX
  2896. --------E-212514-----------------------------
  2897. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  2898.     AX = 2514h
  2899.     BX = segment selector of descriptor in GDT or LDT
  2900.     CL = new access-rights byte
  2901.     CH = new use-type bit (USE16 or USE32)
  2902. Return: CF clear if successful
  2903.     CF set on error
  2904.         EAX = error code
  2905.         09h invalid selector in BX
  2906. SeeAlso: AX=2515h,INT 31/AX=0009h
  2907. --------E-212515-----------------------------
  2908. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  2909.     AX = 2515h
  2910.     BX = segment selector of descriptor in GDT or LDT
  2911. Return: CF clear if successful
  2912.         CL = access-rights byte for segment
  2913.         CH = use-type bit (USE16 or USE32)
  2914.     ECX<16-31> destroyed
  2915.     CF set on error
  2916.         EAX = error code
  2917.         09h invalid segment selector in BX
  2918. SeeAlso: AX=2514h
  2919. --------E-212516-----------------------------
  2920. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  2921.     AX = 2516h
  2922. Return: CF clear
  2923. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  2924. --------E-212517-----------------------------
  2925. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  2926.     AX = 2517h
  2927. Return: CF clear
  2928.     ES:EBX -> data buffer (protected mode address)
  2929.     ECX -> data buffer (real mode address)
  2930.     EDX = size of data buffer in bytes
  2931. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  2932. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  2933. --------E-212518-----------------------------
  2934. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  2935.     AX = 2518h
  2936.     ES:EBX -> function to call when a segment is moved
  2937. Return: CF clear
  2938.     ES:EBX -> previous handler
  2939. --------E-212519-----------------------------
  2940. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  2941.     AX = 2519h
  2942. Return: CF clear
  2943.     EAX = error code
  2944.         0000h  no error
  2945.         0001h  out of physical memory
  2946.         0002h  out of swap space (unable to grow swap file)
  2947.         0003h  out of LDT entries and unable to grow LDT
  2948.         0004h  unable to change extended memory allocation mark
  2949.         FFFFFFFFh    paging disabled
  2950. Note:    VMM is the Virtual Memory Manager option
  2951. --------E-21251A-----------------------------
  2952. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  2953.     AX = 251Ah
  2954.     EDX = number of 4k pages to lock
  2955.     if BL = 00h
  2956.         ECX = linear address of first page to lock
  2957.     if BL = 01h
  2958.         ES:ECX -> pointer to first page to lock
  2959. Return: CF clear if successful
  2960.     CF set on error
  2961.         EAX = error code
  2962.         08h insufficient memory
  2963.         09h invalid address range
  2964. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  2965. --------E-21251B-----------------------------
  2966. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  2967.     AX = 251Bh
  2968.     EDX = number of pages to unlock
  2969.     if BL = 00h
  2970.         ECX = linear address of first page to unlock
  2971.     if BL = 01h
  2972.         ES:ECX -> pointer to first page to unlock
  2973. Return: CF clear if successful
  2974.     CF set on error
  2975.         EAX = error code
  2976.         09h invalid address range
  2977. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  2978. --------E-21251C-----------------------------
  2979. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  2980.     AX = 251Ch
  2981.     BH = preservation flag (00h preserve contents, 01h discard contents)
  2982.     EDX = number of pages to free
  2983.     BL = address type
  2984.         00h linear address
  2985.         ECX = linear address of first page to be freed
  2986.         01h pointer
  2987.         ES:ECX -> first page to be freed
  2988. Return: CF clear if successful
  2989.     CF set on error
  2990.         EAX = error code
  2991.         08h memory error, swap space full, no VMM or DPMI
  2992.         09h invalid address
  2993. --------E-21251D-----------------------------
  2994. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  2995.     AX = 251Dh
  2996.     BL = address type
  2997.         00h linear address
  2998.         ECX = linear address of page table entry to read
  2999.         01h pointer
  3000.         ES:ECX -> page table entry to read
  3001. Return: CF clear if successful
  3002.         EAX = contents of page table entry
  3003.     CF set on error
  3004.         EAX = error code
  3005.         09h invalid address or NOPAGE option set
  3006.         78h invalid under DPMI
  3007. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  3008. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  3009. --------E-21251E-----------------------------
  3010. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  3011.     AX = 251Eh
  3012.     BL = address type
  3013.         00h linear address
  3014.         ECX = linear address of page table entry to read
  3015.         01h pointer
  3016.         ES:ECX -> page table entry to read
  3017.     EDX = new value for page table entry
  3018. Return: CF clear if successful
  3019.     CF set on error
  3020.         EAX = error code
  3021.         09h invalid address or NOPAGE option set
  3022.         82h not compatible with DPMI
  3023. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  3024. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  3025. --------E-21251F-----------------------------
  3026. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  3027.     AX = 251Fh
  3028.     BL = address type
  3029.         00h linear address
  3030.         ECX = linear address of first page table entry
  3031.         EDX = linear address of second page table entry
  3032.         01h pointer
  3033.         ES:ECX -> first page table entry
  3034.         ES:EDX -> second page table entry
  3035. Return: CF clear if successful
  3036.     CF set on error
  3037.         EAX = error code
  3038.         09h invalid address or NOPAGE option set
  3039.         82h not compatible with DPMI
  3040. SeeAlso: AX=251Dh,AX=251Eh
  3041. --------E-212520-----------------------------
  3042. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  3043.     AX = 2520h
  3044.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  3045.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  3046. Return: carry flag clear
  3047.  
  3048. Format of VM stats buffer:
  3049. Offset    Size    Description
  3050.  00h    DWORD    VM status
  3051.         0001h VM subsystem is present
  3052.         0000h VM not present
  3053.  04h    DWORD    "nconvpg" number of conventional memory pages available
  3054.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  3055.  0Ch    DWORD    "nextpg" total number of extended memory pages
  3056.  10h    DWORD    "extlim" extender memory pages limit
  3057.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  3058.  18h    DWORD    "alockpg" number of locked pages owned by application
  3059.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  3060.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  3061.  24h    DWORD    linear address of beginning of application address space
  3062.  28h    DWORD    linear address of end of application address space
  3063.  2Ch    DWORD    number of seconds since last time VM stats were reset
  3064.  30h    DWORD    number of page faults since last time
  3065.  34h    DWORD    number of pages written to swap file since last time
  3066.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  3067.  3Ch    DWORD    number of virtual pages allocated to the application
  3068.  40h    DWORD    size in pages of swap file
  3069.  44h    DWORD    number of system pages allocated with EMS calls
  3070.  48h    DWORD    minimum number of conventional memory pages
  3071.  4Ch    DWORD    maximum size in pages to which swap file can be increased
  3072.  50h    DWORD    "vmflags"
  3073.         bit 0 = 1 if page fault in progress
  3074. ---v4.0+ ---
  3075.  54h    DWORD    number of physical pages guaranteed to be free
  3076.  58h    DWORD    number of free physical pages currently available
  3077.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  3078.           swap space)
  3079.  60h    DWORD    reserved
  3080. --------E-212521-----------------------------
  3081. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  3082.     AX = 2521h
  3083.     EBX = max 4k pages of physical extended memory which program may use
  3084. Return: CF clear if successful
  3085.        EBX = maximum limit in pages
  3086.        ECX = minimum limit in pages
  3087.     CF set on error
  3088.         EAX = error code
  3089.         08h insufficient memory or -nopage switch used
  3090. SeeAlso: AX=2522h
  3091. --------E-212522-----------------------------
  3092. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  3093.     AX = 2522h
  3094.     ES:EBX -> alternate handler for page faults
  3095. Return: CF clear
  3096.     ES:EBX -> previous page-fault handler
  3097. SeeAlso: AX=2523h
  3098. --------E-212523-----------------------------
  3099. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  3100.     AX = 2523h
  3101.     ???
  3102. Return: ???
  3103. Note:    this function takes a DWORD pointer and a DWORD pointer to a DWORD
  3104.       pointer as arguments
  3105. SeeAlso: AX=2522h
  3106. --------E-212524-----------------------------
  3107. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  3108.     AX = 2524h
  3109.     ???
  3110. Return: ???
  3111. Note:    this function takes three DWORD pointers and three DWORD pointers to
  3112.       DWORD pointers as arguments
  3113. --------E-212525-----------------------------
  3114. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  3115.     AX = 2525h
  3116.     EBX = limit in 4k pages of physical conventional memory which program
  3117.           may use
  3118. Return: CF clear if successful
  3119.         EBX = maximum limit in pages
  3120.         ECX = minimum limit in pages
  3121.     CF set on error
  3122.         EAX = error code
  3123.         08h insufficient memory or -nopage switch used
  3124. SeeAlso: AX=2521h
  3125. --------E-212526-----------------------------
  3126. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  3127.     AX = 2526h
  3128.     ???
  3129. Return: ???
  3130. Notes:    details are not yet available
  3131.     this function takes a pointer to the configuration buffer (see below)
  3132.       and a poitner to a BYTE as arguments
  3133.  
  3134. Format of configuration buffer:
  3135. Offset    Size    Description
  3136.  00h    DWORD    flags 1 (see below)
  3137.  04h    DWORD    flags 2 (unused through v5.0)
  3138.  08h    DWORD    flags 3 (unused through v5.0)
  3139.  0Ch    DWORD    386|DOS-Extender major version
  3140.  10h    DWORD    386|DOS-Extender minor version
  3141.  14h    DWORD    first letter of text after minor version number in version str
  3142.  18h    DWORD    beta flag (00h normal release, 01h beta release)
  3143.  1Ch    DWORD    processor (3 = 386, 4 = 486)
  3144.  20h    DWORD    coprocessor (4 = none, 6 = 287, 7 = 387/486)
  3145.  24h    DWORD    Weitek coprocessor flag (0 = none, 1 = present)
  3146.  28h    DWORD    machine type (0 = IBM PC compatible, 1 = NEC 9800 series)
  3147.  2Ch    DWORD    machine class
  3148.         IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA)
  3149.         NEC: 0=normal mode, 1=high-res mode
  3150.  30h    DWORD    VCPI flag (0 = none, 1 = present)
  3151.  34h    DWORD    -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF)
  3152.  38h    DWORD    -MINREAL setting
  3153.  3Ch    DWORD    -MAXREAL setting
  3154.  40h    DWORD    -MINIBUF setting
  3155.  44h    DWORD    -MAXIBUF setting
  3156.  48h    DWORD    size in bytes of DOS call data buffer
  3157.  4Ch    DWORD    number of interrupt stacks (-NISTACK)
  3158.  50h    DWORD    interrupt stack size (-ISTKSIZE)
  3159.  54h    DWORD    -REALBREAK setting
  3160.  58h    DWORD    -CALLBUFS
  3161.  5Ch    DWORD    -HWIVEC
  3162.  60h    DWORD    -PRIVEC
  3163.  64h    DWORD    -INTMAP
  3164.  68h    DWORD    -PRIMAP
  3165.  6Ch    DWORD    VCPI: master 8259 interrupt vector base (IRQ0 mapping)
  3166.  70h    DWORD    VCPI: slave 8259 interrupt vector base (IRQ8 mapping)
  3167.  74h    DWORD    BIOS print screen interrupt vector (0 if NEC)
  3168.  78h    DWORD    -EXTLOW setting
  3169.  7Ch    DWORD    -EXTHIGH setting
  3170.  80h    DWORD    lowest physical extended-memory address allocatable
  3171.  84h    DWORD    highest physical extended-memory address allocatable + 1
  3172.  88h    DWORD    special memory's physical base address (00000000h if none)
  3173.  8Ch    DWORD    special memory size in bytes (00000000h if none)
  3174.  90h    DWORD    -MAXVCPIMEM setting
  3175.  94h    DWORD    -VSCAN
  3176.  98h    DWORD    -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX)
  3177.  9Ch    DWORD    -CODESIZE setting
  3178.  A0h    DWORD    minimum swap file size (-MINSWFSIZE)
  3179.  A4h    DWORD    maximum swap fiel size (-MAXSWFSIZE)
  3180.  A8h    DWORD    page replacement policy (0 = LFU, 1 = NUR)
  3181.  ACh    DWORD    number of GDT entries (-NGDTENT)
  3182.  B0h    DWORD    number of LDT entries (-NLDTENT)
  3183.  B4h    DWORD    program's privilege level (0-3)
  3184. ---386|DOS-Extender v3.0+ ---
  3185.  B8h    DWORD    -LOCKSTACK setting
  3186.  BCh    DWORD    -MAXEXTMEM
  3187.  C0h    DWORD    -MAXXMSMEM
  3188.  C4h    DWORD    -MAXPGMMEM
  3189.  C8h    DWORD    -DATATHRESHOLD
  3190.  CCh    DWORD    virtual memory manager flag (0 = not present, 1 = present)
  3191.  D0h    DWORD    Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present)
  3192.  D4h    DWORD    -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF)
  3193.  D8h    DWORD    DPMI flag (0 = not present, 1 = present)
  3194.  DCh    DWORD    DPMI major version
  3195.  E0h    DWORD    DPMI minor version
  3196.  E4h    DWORD    DPMI capabilities flags
  3197.         bit 0: paging supported
  3198.         bit 1: physical device mapping
  3199.         bit 2: conventional memory mapping
  3200.         bit 3: exceptions restartable
  3201.  E8h    DWORD    VCPI major version
  3202.  ECh    DWORD    VCPI minor version
  3203.  F0h    WORD    VCPI: IRQ0-7 physical base interrupt vector
  3204.  F2h    WORD    VCPI: IRQ8-15 physical base interrupt vector
  3205.  F4h    DWORD    XMS flag (0 = none, 1 = present)
  3206.  F8h    DWORD    XMS major version
  3207.  FCh    DWORD    XMS minor version
  3208. 100h    WORD    application's CS selector
  3209. 102h    WORD    application's DS selector
  3210. 104h    WORD    application's PSP selector
  3211. 106h    WORD    application's environment selector
  3212. 108h    WORD    selector mapping entire first megabyte
  3213. 10Ah    WORD    selector mapping text video memory
  3214. 10Ch    WORD    selector mapping video memory (text for IBM, graphics for NEC)
  3215. 10Eh    WORD    selector mapping Weitek address space, 0000h if not present
  3216. 110h    WORD    selector mapping Cyrix EMC387 address space, 0000h if none
  3217. 112h    WORD    reserved (0)
  3218. 114h    DWORD    real-mode FAR entry point to call to switch to protected mode
  3219.           with no saved context
  3220. 118h    DWORD    size of LDT in bytes
  3221. ---386|DOS-Extender v5.0+ ---
  3222. 11Ch    DWORD    Windows flag (0 = not present, 1 = Windows present)
  3223. 120h    DWORD    Windows major version
  3224. 124h    DWORD    Windows minor version
  3225. 128h    DWORD    Windows mode (0 = real/standard, 1 = enhanced)
  3226. 12Ch    DWORD    OS/2 flag (0 = not present, 1 = OS/2 present)
  3227. 130h    DWORD    OS/2 major version
  3228. 134h    DWORD    OS/2 minor version
  3229. 138h 50 DWORDs    reserved (0)
  3230.  
  3231. Bitfields for flags 1:
  3232. Bit(s)    Description
  3233.  0    -NOPAGE specified
  3234.  1    -A20 specified
  3235.  2    -VDISK specified
  3236.  3    -XT specified
  3237.  4    -AT specified
  3238.  5    -MCA specified
  3239.  6    -EISA specified
  3240.  7    -NORMRES specified (NEC only)
  3241.  8    -HIGHRES specified (NEC only)
  3242.  9    set if -SWFGROW1ST, clear if -NOSWFGROW1ST
  3243.  10    -NOVM specified
  3244.  11    -SAVEREGS specified
  3245.  12    unused (clear)
  3246.  13    -NOVCPI specified
  3247.  14    -NOMUL specified
  3248.  15    -NOBMCHK specified
  3249.  16    -NOSPCLMEM or -NOBIM
  3250.  17    -NOPGEXP specified
  3251.  18    -SWAPDEFDISK specified
  3252. ---v3.0+ ---
  3253.  19    -SAVEINTS specified
  3254.  20    -NOLOAD specified
  3255.  21    -PAGELOG specified
  3256.  22    -OPENDENY specified
  3257.  23    -ERRATA17 specified
  3258. ---v4.1+ ---
  3259.  24    -NESTDPMI specified
  3260.  25    -NONESTDPMI specified
  3261.  26    -NODPMI specified
  3262.  27    -NOPCDWEITEK specified
  3263. ---v4.2+ ---
  3264.  28    -WININT21 specified
  3265. --------E-212527-----------------------------
  3266. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  3267.     AX = 2527h
  3268.     EBX = new status (00h disabled, 01h enabled)
  3269. Return: CF clear
  3270.     EBX = previous state save flag
  3271. SeeAlso: AX=2528h
  3272. --------E-212528-----------------------------
  3273. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  3274.     AX = 2528h
  3275.     DS:EBX -> buffer for registers (see below)
  3276. Return: CF clear if successful
  3277.         DS:EBX buffer filled
  3278.     CF set on error
  3279.         EAX = error code
  3280.         83h interrupt state save not enabled
  3281.         84h no active interrupt
  3282. SeeAlso: AX=2527h
  3283.  
  3284. Format of buffer for registers:
  3285. Offset    Size    Description
  3286.  00h  8 BYTEs    unused
  3287.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  3288.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  3289.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  3290.  34h    DWORD    EIP
  3291.  38h    DWORD    EFLAGS
  3292. --------E-212529-----------------------------
  3293. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  3294.     AX = 2529h
  3295.     ???
  3296. Return: ES:EBX -> parameter block
  3297.     ???
  3298. Note:    details not available at this time
  3299. SeeAlso: AX=252Ah
  3300.  
  3301. Format of parameter block:
  3302. Offset    Size    Description
  3303.  00h    DWORD    initial EIP
  3304.  04h    WORD    initial CS
  3305.  06h    DWORD    initial ESP
  3306.  0Ah    WORD    initial SS
  3307.  0Ch  4 WORDs    initial DS, ES, FS, GS
  3308.  14h    DWORD    minimum size in bytes of program segment
  3309.  18h    DWORD    bytes of additional memory allocated
  3310.  1Ch    DWORD    flags
  3311.         bit 0: child linked with -UNPRIVILEGED
  3312.         ---v6.0+ ---
  3313.         bit 1: child is PE file instead of .EXP
  3314.         bit 2: loaded file is a DLL
  3315.         bits 3-31 reserved
  3316. ---v6.0+ ---
  3317.  20h    DWORD    module handles (PE files only)
  3318.  24h  7 DWORDs    reserved (0)
  3319. --------E-21252A-----------------------------
  3320. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  3321.     AX = 252Ah
  3322.     DS:EDX -> ASCIZ program name
  3323.     ES:EBX -> parameter block (see AX=2512h)
  3324.     ECX = size of LDT buffer in bytes
  3325.     ESI = bit flags
  3326.         bit 0: allow demand paging rather than loading entire program
  3327.         bit 1: demand page from swap file rather than from .EXP
  3328. Return: CF clear if successful
  3329.         EAX = VMM handle or FFFFFFFFh if none
  3330.         ECX = number of descriptors in LDT buffer
  3331.     CF set on error
  3332.         EAX = error code
  3333.         02h file error
  3334.             EBX = file error code (see below)
  3335.             ECX = DOS error code if EBX=1,2,3, or 8
  3336.         08h insufficient memory
  3337.             EBX = memory error code (see below)
  3338.         80h LDT buffer too small
  3339.         87h called twice without intervening call to AX=2531h
  3340. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  3341.  
  3342. Values for file error code:
  3343.  01h    DOS open error
  3344.  02h    DOS seek error
  3345.  03h    DOS read error
  3346.  04h    not an .EXP or .REX file
  3347.  05h    invalid file format
  3348.  06h    -OFFSET is not a multiple of 64K
  3349.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  3350.  08h    DOS error loading .EXE file
  3351.  
  3352. Values for memory error code:
  3353.  01h    out of physical memory
  3354.  02h    out of swap space
  3355.  04h    unable to change extended memory allocation
  3356.  05h    -MAXPGMMEM exceeded
  3357.  06h    insufficient low memory to REALBREAK value
  3358.  07h    insufficient low memory for PSP and environment
  3359. --------E-21252BBL00-------------------------
  3360. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES
  3361.     AX = 252Bh
  3362.     BL = 00h
  3363.     ???
  3364. Return: ???
  3365. --------E-21252BBL01-------------------------
  3366. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES
  3367.     AX = 252Bh
  3368.     BL = 01h
  3369.     ???
  3370. Return: ???
  3371. --------E-21252BBL02-------------------------
  3372. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES
  3373.     AX = 252Bh
  3374.     BL = 02h
  3375.     ???
  3376. Return: ???
  3377. --------E-21252BBL03-------------------------
  3378. INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE
  3379.     AX = 252Bh
  3380.     BL = 03h
  3381.     ???
  3382. Return: ???
  3383. SeeAlso: AX=252Bh/BL=0Bh
  3384. --------E-21252BBL04-------------------------
  3385. INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES
  3386.     AX = 252Bh
  3387.     BL = 04h
  3388.     ???
  3389. Return: ???
  3390. Note:    returns one word per page
  3391.  
  3392. Bitfields for page information:
  3393. Bit(s)    Description
  3394.  7    mapped to read/write data file
  3395.  6    mapped to read-only data file
  3396.  5    swapped to disk
  3397.  4    locked
  3398.  3-0    page type
  3399.     0 unmapped
  3400.     1 allocated
  3401.     2 physical device page
  3402. --------E-21252B-----------------------------
  3403. INT 21 P - Phar Lap 386/DOS-Extender - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  3404.     AX = 252Bh
  3405.     BH = function
  3406.         05h lock pages
  3407.         06h unlock pages
  3408.     BL = address type
  3409.         00h linear address
  3410.         ECX = linear start address of memory region
  3411.         01h segmented address
  3412.         ES:ECX -> start of memory region
  3413.     EDX = size of memory region in bytes
  3414. Return: CF clear if successful
  3415.     CF set on error
  3416. Note:    this function is also supported by FlashTek X-32VM; if X-32 is not
  3417.       using virtual memory, this function always succeeds
  3418. --------E-21252B-----------------------------
  3419. INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES
  3420.     AX = 252Bh
  3421.     BL = function (07h,08h)
  3422.     ???
  3423. Return: ???
  3424. --------E-21252BBH09-------------------------
  3425. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  3426.     AX = 252Bh
  3427.     BH = 09h
  3428.     BL = subfunction
  3429.         00h get page table entry by linear address
  3430.         ECX = linear address for which to get page table entry
  3431.         01h get page table entry by logical address
  3432.         ES:ECX = address for which to get page table entry
  3433. Return: CF clear if successful
  3434.         EAX = page table entry
  3435.         EBX = additional page table information
  3436.     CF set on error
  3437.         EAX = error code
  3438.         0009h invalid address
  3439.         0082h running under DPMI
  3440. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  3441. --------E-21252BBH0A-------------------------
  3442. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  3443.     AX = 252Bh
  3444.     BH = 0Ah
  3445.     BL = subfunction
  3446.         00h set page table entry for linear address
  3447.         ECX = linear address for which to get page table entry
  3448.         01h set page table entry for logical address
  3449.         ES:ECX = address for which to get page table entry
  3450.     ESI = page table entry
  3451.     EDI = additional page table information
  3452. Return: CF clear if successful
  3453.     CF set on error
  3454.         EAX = error code
  3455.         0009h invalid address
  3456.         0082h running under DPMI
  3457. SeeAlso: AX=252Bh/BH=09h
  3458. --------E-21252BBH0B-------------------------
  3459. INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET
  3460.     AX = 252Bh
  3461.     BH = 0Bh
  3462.     BL = subfunction
  3463.         00h by linear address
  3464.         ECX = linear address at which to map data file
  3465.         01h by logical address
  3466.         ES:ECX = logical address at which to map data file
  3467.     EDX = number of bytes to map
  3468.     DS:ESI -> mapping structure (see below)
  3469.     DS:EDI -> ASCIZ filename
  3470. Return: CF clear if successful
  3471.     CF set on error
  3472.         EAX = error code
  3473.         0002h file error
  3474.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  3475.             EDX = error code returned by DOS
  3476.         0009h invalid address
  3477.         0081h invalid parameters or 386|VMM not present
  3478.         0086h all 386|VMM file handles already in use
  3479. SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h
  3480.  
  3481. Format of mapping structure:
  3482. Offset    Size    Description
  3483.  00h    DWORD    starting file offset to be mapped
  3484.  04h    DWORD    DOS file access and sharing modes (see INT 21/AH=3Dh)
  3485. --------E-21252C-----------------------------
  3486. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  3487.     AX = 252Ch
  3488.     BX = segment selector
  3489.     ECX = number of 4K pages to add
  3490. Return: CF clear if successful
  3491.         EAX = offset in segment of beginning of unmapped pages
  3492.     CF set on error
  3493.         EAX = error code
  3494.         08h insufficent memory
  3495.         09h invalid selector
  3496.         82h not supported by current DPMI
  3497. --------E-21252D-----------------------------
  3498. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  3499.     AX = 252Dh
  3500.     EBX = VMM file handle
  3501. Return: CF clear if successful
  3502.     CF set on error
  3503.         EAX = error code (81h invalid VMM handle)
  3504. --------E-21252E-----------------------------
  3505. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  3506.     AX = 252Eh
  3507.     CL = direction (00h get parameters, 01h set parameters)
  3508.     DS:EBX -> parameter buffer (see below)
  3509. Return: CF clear if successful
  3510.     CF set on error
  3511.         EAX = error code (81h bad parameter value)
  3512.  
  3513. Format of VMM parameter buffer:
  3514. Offset    Size    Description
  3515.  00h    DWORD    flags
  3516.         bit 0: page fault logging enabled
  3517.         ---v5.0+ ---
  3518.         bit 1: swap extender to disk during DOS EXEC call
  3519.         bit 2: don't zero allocated memory
  3520.  04h    DWORD    scan period for page aging, in milliseconds
  3521.  08h    DWORD    maximum size (in bytes) to check on each page scan
  3522.  0Ch 52 BYTEs    unused
  3523. --------E-21252F-----------------------------
  3524. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  3525.     AX = 252Fh
  3526.     DS:EBX -> data to be written
  3527.     CX = size of data in bytes
  3528. Return: CF clear if successful
  3529.     CF set on error
  3530.         EAX = error code (85h no page log file or not 386/VMM)
  3531. --------E-212530-----------------------------
  3532. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  3533.     AX = 2530h
  3534.     ECX = size of data buffer in bytes (1024 to 65536)
  3535. Return: CF clear if successful
  3536.     CF set on error
  3537.         EAX = error code
  3538.         08h insufficient low memory
  3539.         81h invalid size
  3540. SeeAlso: AX=2517h
  3541. --------E-212531-----------------------------
  3542. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  3543.     AX = 2531h
  3544.     BX = segment selector
  3545.     ECX = direction (00h read, 01h write)
  3546.     DS:EDX -> 8-byte buffer for descriptor contents
  3547. Return: CF clear if successful
  3548.     CF set on error
  3549.         EAX = error code
  3550.         81h invalid selector
  3551.         82h DPMI running, or not a code or data segment
  3552. --------E-212532-----------------------------
  3553. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  3554.     AX = 2532h
  3555.     CL = exception number (00h-0Fh)
  3556. Return: CF clear if successful
  3557.         ES:EBX = CS:EIP of current exception handler
  3558.     CF set on error (CL > 0Fh)
  3559. Notes:    this call is also supported by the FlashTek X-32VM extender
  3560.     this function is incompatible with 386|VMM; use AX=2522h instead
  3561. SeeAlso: AX=2522h,AX=2533h
  3562. --------E-212533-----------------------------
  3563. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  3564.     AX = 2533h
  3565.     CL = exception number (00h-0Fh)
  3566.     DS:EDX = CS:EIP of new exception handler
  3567. Return: CF clear if successful
  3568.     CF set on error (CL > 0Fh)
  3569. Notes:    this call is also supported by the FlashTek X-32VM extender
  3570.     this function is incompatible with 386|VMM; use AX=2522h instead
  3571. SeeAlso: AX=2522h,AX=2532h
  3572. --------E-212534-----------------------------
  3573. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  3574.     AX = 2534h
  3575. Return: CF clear
  3576.     EAX = interrupt state (00h disabled, 01h enabled)
  3577. --------E-212535-----------------------------
  3578. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  3579.     AX = 2535h
  3580.     EBX = direction (00h read registers, 01h write)
  3581.     DS:EDX -> system register record (see below)
  3582. Return: CF clear
  3583. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  3584.       installed
  3585.  
  3586. Format of system register record:
  3587. Offset    Size    Description
  3588.  00h    DWORD    CR0
  3589.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  3590.  14h  2 DWORDs    reserved
  3591.  1Ch  2 DWORDs    DR6,DR7
  3592.  24h  3 DWORDs    reserved
  3593. --------E-212536----------------------------
  3594. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  3595.     AX = 2536h
  3596.     EBX = bit flags
  3597.         bit 0: modifying conventional memory rather than extended memory
  3598.         bit 1: setting maximum memory usage rather than minimum
  3599.     ECX = new limit in 4K pages
  3600. Return: CF clear if successful
  3601.         EAX = new limit
  3602.     CF set on error
  3603.         EAX = error code (08h memory error or -NOPAGE set)
  3604.         EBX = maximum limit in pages
  3605.         ECX = minimum limit in pages
  3606. --------E-212537----------------------------
  3607. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  3608.     AX = 2537h
  3609.     BX = number of paragraphs to allocate
  3610. Return: CF clear if successful
  3611.         AX = real-mode segment of allocated block
  3612.     CF set on error
  3613.         AX = error code
  3614.         07h MS-DOS memory chain corrupted
  3615.         08h insufficient low memory
  3616.         BX = size in paragraphs of largest free block
  3617. SeeAlso: AH=48h
  3618. --------E-212538----------------------------
  3619. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  3620.     AX = 2538h
  3621.     DS:EBX -> buffer for registers (see AX=2528h)
  3622.     ECX = register record to retrieve
  3623.         00h first interrupt state
  3624.         01h next interrupt state
  3625.         EDX = handle for current interrupt state
  3626. Return: CF clear if successful
  3627.         DS:EBX buffer filled
  3628.         EDX = handle of current interrupt state
  3629.         ESI = number of interrupt which occurred
  3630.     CF set on error
  3631.         EAX = error code
  3632.         81h invalid handle in EDX
  3633.         83h register saving not enabled
  3634.         84h no more interrupt states
  3635. SeeAlso: AX=2527h,AX=2528h
  3636. --------E-212539----------------------------
  3637. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  3638.     AX = 2539h
  3639.     BX = MS-DOS file handle for open file
  3640. Return: CF clear if successful
  3641.         EAX = offset of .EXP header in file
  3642.     CF set on error
  3643.         EAX = error code (02h file error)
  3644.         EBX = file error code
  3645.         02h DOS error seeking
  3646.         03h DOS error reading
  3647.         04h invalid file type    
  3648.         05h invalid file format
  3649.         ECX = DOS error code if EBX=02h or 03h
  3650.     current file position in file modified
  3651. --------E-21253A----------------------------
  3652. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  3653.     AX = 253Ah
  3654.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  3655.         an error
  3656. Return: CF clear
  3657.     ES:EBX -> previous handler
  3658. SeeAlso: AH=4Ah
  3659. --------E-21253B----------------------------
  3660. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  3661.     AX = 253Bh
  3662.     DS:EBX -> buffer containing register contents (see AX=2528h)
  3663. Return: never returns
  3664. SeeAlso: AX=2528h
  3665. --------E-21253C-----------------------------
  3666. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  3667.     AX = 253Ch
  3668. Return: CF clear
  3669.     EAX = old size of swap file in bytes
  3670.     EBX = new size of swap file in bytes
  3671. --------E-21253D-----------------------------
  3672. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  3673.     AX = 253Dh
  3674.     BL = interrupt number
  3675.     ECX = direction (0 = read, 1 = write)
  3676.     DS:EDX -> 8-byte buffer for descriptor
  3677. Return: CF clear if successful
  3678.         DS:EDX filled if reading
  3679.     CF set on error
  3680.         EAX = error code (0082h if running under DPMI)
  3681. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  3682.       shadow IDT
  3683. Notes:    this call will always fail under DPMI because it is not possible to
  3684.       access the IDT
  3685.     the descriptor is not checked when writing
  3686.     this call can normally be used only by programs running in ring 0
  3687.       because the processor does not allow an interrupt to be vectored to
  3688.       a less privileged ring
  3689. --------E-21253F-----------------------------
  3690. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - ALLOCATE LDT DESCRIPTOR
  3691.     AX = 253Fh
  3692.     BX = LDT descriptor to allocate (0000h for any)
  3693.     ???
  3694. Return: ???
  3695. --------E-212540-----------------------------
  3696. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - FORCE ALIAS OF SEGMENT
  3697.     AX = 2540h
  3698.     ???
  3699. Return: ???
  3700. --------E-212544-----------------------------
  3701. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - FREE DLL
  3702.     AX = 2544h
  3703.     ???
  3704. Return: ???
  3705. --------E-212545-----------------------------
  3706. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - GET/SET PROCEDURE ADDRESS
  3707.     AX = 2545h
  3708.     ECX = direction (00h get, 01h set)
  3709.     ???
  3710. Return: ???
  3711. --------E-212546-----------------------------
  3712. INT 21 Pu - Phar Lap 386/DOS-Extenderr v6.0+ - GET MODULE HANDLE
  3713.     AX = 2546h
  3714.     ???
  3715. Return: ???
  3716. --------E-2125C0-----------------------------
  3717. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  3718.     AX = 25C0h
  3719.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  3720. Return: CF clear if successful
  3721.         AX = real-mode paragraph address of memory
  3722.     CF set on error
  3723.         AX = error code
  3724.         07h MS-DOS memory control blocks destroyed
  3725.         08h insufficient memory
  3726.         BX = size in paragraphs of largest available memory block
  3727. SeeAlso: AX=25C1h,AX=25C2h
  3728. --------E-2125C1-----------------------------
  3729. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  3730.     AX = 25C1h
  3731.     CX = real-mode paragraph address of memory block to free
  3732. Return: CF clear if successful
  3733.         EAX destroyed
  3734.     CF set on error
  3735.         AX = error code
  3736.         07h MS-DOS memory control blocks destroyed
  3737.         09h invalid memory block address in CX
  3738. SeeAlso: AX=25C0h,AX=25C2h
  3739. --------E-2125C2-----------------------------
  3740. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  3741.     AX = 25C2h
  3742.     BX = new requested block size in paragraphs
  3743.     CX = real-mode paragraph address of memory block to modify
  3744. Return: CF clear if successful
  3745.         EAX destroyed
  3746.     CF set on error
  3747.         AX = error code
  3748.         07h MS-DOS memory control blocks destroyed
  3749.         08h insufficient memory
  3750.         09h invalid memory block address in CX
  3751.         BX = size in paragraphs of largest available memory block
  3752. SeeAlso: AX=25C0h,AX=25C1h
  3753. --------E-2125C3-----------------------------
  3754. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  3755.     AX = 25C3h
  3756.     ES:EBX -> pointer to parameter block (see below)
  3757.     DS:EDX -> pointer to ASCIZ program filename
  3758. Return: CF clear if successful
  3759.         all registers unchanged
  3760.     CF set on error
  3761.         EAX = error code (see below)
  3762.  
  3763. Values for error code:
  3764.  01h function code in AL is invalid ???
  3765.  02h file not found or path invalid
  3766.  05h access denied
  3767.  08h insufficient memory to load program
  3768.  0Ah environment invalid
  3769.  0Bh invalid file format
  3770.  
  3771. Format of parameter block:
  3772. Offset    Size    Description
  3773.  00h    DWORD    32-bit offset of environment string
  3774.  04h    WORD    segment selector of environment string
  3775.  06h    DWORD    32-bit offset of command-tail string
  3776.  0Ah    WORD    segment selector of command-tail string
  3777. --------D-2126-------------------------------
  3778. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  3779.     AH = 26h
  3780.     DX = segment at which to create PSP (see below)
  3781. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  3782.       taken from interrupt vector table; the parent PSP field is set to 0
  3783.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  3784.       copy
  3785. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  3786.  
  3787. Format of PSP:
  3788. Offset    Size    Description
  3789.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  3790.         the CDh 20h here is often used as a signature for a valid PSP
  3791.  02h    WORD    segment of first byte beyond memory allocated to program
  3792.  04h    BYTE    unused filler
  3793.  05h    BYTE    CP/M CALL 5 service request (FAR CALL to absolute 000C0h)
  3794.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  3795.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  3796.  08h  2 BYTEs    remainder of FAR JMP at 05h
  3797.  0Ah    DWORD    stored INT 22 termination address
  3798.  0Eh    DWORD    stored INT 23 control-Break handler address
  3799.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  3800.  16h    WORD    segment of parent PSP
  3801.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  3802.  2Ch    WORD    DOS 2+ segment of environment for process
  3803.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  3804.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  3805.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  3806.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  3807.         used by SHARE in DOS 3.3
  3808.  3Ch    BYTE    apparently unused by MS-DOS versions <= 6.00
  3809.         (Novell DOS 7) interim console flag (see AX=6301h)
  3810.  3Dh    BYTE    (APPEND) TrueName flag (see INT 2F/AX=B711h)
  3811.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  3812.  3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh
  3813.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  3814.  42h    WORD    (MSWindows3) selector of next PSP (PDB) in linked list
  3815.         Windows keeps a linked list of Windows programs only
  3816.  44h  4 BYTEs    unused by DOS versions <= 6.00
  3817.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  3818.  49h  7 BYTEs    unused by DOS versions <= 6.00
  3819.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  3820.  53h  2 BYTEs    unused in DOS versions <= 6.00
  3821.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  3822.           into an extended FCB
  3823.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  3824.         overwrites second FCB if opened
  3825.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  3826.           overwrites beginning of commandline if opened
  3827.  7Ch  4 BYTEs    unused
  3828.  80h 128 BYTEs    commandline / default DTA
  3829.         command tail is BYTE for length of tail, N BYTEs for the tail,
  3830.           followed by a BYTE containing 0Dh
  3831. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  3832.       allocating memory for a new open file table, filling it with FFh,
  3833.       copying the first 20 bytes from the default table, and adjusting the
  3834.       pointer and count at 34h and 32h.  However, DOS will only copy the
  3835.       first 20 file handles into a child PSP (including the one created on
  3836.       EXEC).
  3837.     network redirectors based on the original MS-Net implementation use
  3838.       values of 80h-FEh in the open file table to indicate remote files;
  3839.       Novell NetWare also uses values from FEh down to 80h or one more than
  3840.       FILES= (whichever is greater) to indicate remote files
  3841.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  3842.       high; the first FCB is empty and the second contains the first
  3843.       parameter
  3844.     some DOS extenders place protected-mode values in various PSP fields
  3845.       such as the "parent" field, which can confuse PSP walkers.  Always
  3846.       check either for the CDh 20h signature or that the suspected PSP is
  3847.       at the beginning of a memory block which owns itself (the preceding
  3848.       paragraph should be a valid MCB with "owner" the same as the
  3849.       suspected PSP).
  3850.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  3851.       checking that a legal PSP segment is current; see AH=50h for further
  3852.       discussion
  3853.  
  3854. Format of environment block:
  3855. Offset    Size    Description
  3856.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  3857.       N BYTEs    second environment variable, ASCIZ string
  3858.     ...
  3859.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  3860.     BYTE    00h
  3861. ---DOS 3+---
  3862.     WORD    number of strings following environment (normally 1)
  3863.       N BYTEs    ASCIZ full pathname of program owning this environment
  3864.         other strings may follow
  3865. --------D-2127-------------------------------
  3866. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  3867.     AH = 27h
  3868.     CX = number of records to read
  3869.     DS:DX -> opened FCB (see AH=0Fh)
  3870. Return: AL = status
  3871.         00h successful, all records read
  3872.         01h end of file, no data read
  3873.         02h segment wrap in DTA, no data read
  3874.         03h end of file, partial read
  3875.     [DTA] = records read from file
  3876.     CX = number of records read (return AL = 00h or 03h)
  3877. Notes:    read begins at current file position as specified in FCB; the file
  3878.       position is updated after reading
  3879.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3880. SeeAlso: AH=21h,AH=28h,AH=3Fh
  3881. --------D-2128-------------------------------
  3882. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  3883.     AH = 28h
  3884.     CX = number of records to write
  3885.     DS:DX -> opened FCB (see AH=0Fh)
  3886.     [DTA] = records to write
  3887. Return: AL = status
  3888.         00h successful
  3889.         01h disk full or file read-only
  3890.         02h segment wrap in DTA
  3891.     CX = number of records written
  3892. Notes:    write begins at current file position as specified in FCB; the file
  3893.       position is updated after writing
  3894.     if CX = 0000h on entry, no data is written; instead the file size is
  3895.       adjusted to be the same as the file position specified by the random
  3896.       record and record size fields of the FCB
  3897.     if the data to be written is less than a disk sector, it is copied into
  3898.       a DOS disk buffer, to be written out to disk at a later time
  3899.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3900. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  3901. --------D-2129-------------------------------
  3902. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  3903.     AH = 29h
  3904.     AL = parsing options (see below)
  3905.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  3906.     ES:DI -> buffer for unopened FCB
  3907. Return: AL = result code
  3908.         00h successful parse, no wildcards encountered
  3909.         01h successful parse, wildcards present
  3910.         FFh failed (invalid drive specifier)
  3911.     DS:SI -> first unparsed character
  3912.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  3913. Notes:    asterisks expanded to question marks in the FCB
  3914.     all processing stops when a filename terminator is encountered
  3915.     cannot be used with filespecs which include a path (DOS 2+)
  3916.     Novell NetWare monitors the result code since an 'invalid drive' may
  3917.       signal an attempt to reconnect a network drive; if there are no
  3918.       connections to the specified drive, NetWare attempts to build a
  3919.       connection and map the drive to the SYS:LOGIN directory
  3920. SeeAlso: AH=0Fh,AH=16h,AH=26h
  3921.  
  3922. Bitfields for parsing options:
  3923. Bit(s)    Description
  3924.  0    skip leading separators
  3925.  1    use existing drive number in FCB if no drive is specified, instead of
  3926.       setting field to zero
  3927.  2    use existing filename in FCB if no base name is specified, instead of
  3928.       filling field with blanks
  3929.  3    use existing extension in FCB if no extension is specified, instead of
  3930.       filling field with blanks
  3931.  4-7    reserved (0)
  3932. --------D-212A-------------------------------
  3933. INT 21 - DOS 1+ - GET SYSTEM DATE
  3934.     AH = 2Ah
  3935. Return: CX = year (1980-2099)
  3936.     DH = month
  3937.     DL = day
  3938. ---DOS 1.10+---
  3939.     AL = day of week (00h=Sunday)
  3940. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  3941. --------D-212B-------------------------------
  3942. INT 21 - DOS 1+ - SET SYSTEM DATE
  3943.     AH = 2Bh
  3944.     CX = year (1980-2099)
  3945.     DH = month
  3946.     DL = day
  3947. Return: AL = status
  3948.         00h successful
  3949.         FFh invalid date, system date unchanged
  3950. Note:    DOS 3.3+ also sets CMOS clock
  3951. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  3952. --------E-212B--CX4149-----------------------
  3953. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  3954.     AH = 2Bh
  3955.     CX = 4149h ('AI')
  3956.     DX = 413Fh ('A?')
  3957. Return: AL <> FFh if installed
  3958. Note:    Borland's TKERNEL makes this call
  3959. --------c-212B--CX4358-----------------------
  3960. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  3961.     AH = 2Bh
  3962.     CX = 4358h ('CX')
  3963. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  3964.     AL = 00h if installed
  3965.         CF clear
  3966.         CX = 6378h ('cx')
  3967.         BX = ???
  3968.         DX = version (DH = major version, DL = binary minor version)
  3969. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  3970.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  3971.       to PC-Kwik v3.20)
  3972. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  3973. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  3974. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  3975. --------Q-212B--CX4445-----------------------
  3976. INT 21 - DESQview - INSTALLATION CHECK
  3977.     AH = 2Bh
  3978.     CX = 4445h ('DE')
  3979.     DX = 5351h ('SQ')
  3980.     AL = subfunction (DV v2.00+)
  3981.         01h get version
  3982.         Return: BX = version (BH = major, BL = minor)
  3983.         Note: early copies of v2.00 return 0002h
  3984.         02h get shadow buffer info, and start shadowing
  3985.         Return: BH = rows in shadow buffer
  3986.             BL = columns in shadow buffer
  3987.             DX = segment of shadow buffer
  3988.         04h get shadow buffer info
  3989.         Return: BH = rows in shadow buffer
  3990.             BL = columns in shadow buffer
  3991.             DX = segment of shadow buffer
  3992.         05h stop shadowing
  3993. Return: AL = FFh if DESQview not installed
  3994. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  3995.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  3996.       01h for all subfunction requests 0Ch and higher and appears to ignore
  3997.       all lower-numbered functions not listed here.
  3998.     DESQview versions 2.5x are part of DESQview/X v1.0x.
  3999. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  4000. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  4001. --------U-212B--CX454C-----------------------
  4002. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  4003.     AH = 2Bh
  4004.     CX = 454Ch ('EL')
  4005.     DX = 5253h ('RS')
  4006. Return: ES:BX -> ELRES history structure (see below)
  4007.     DX = DABEh (signature, DAve BEnnett)
  4008. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  4009.       Bennett which stores recent errorlevel values, allows them to be
  4010.       retrieved for use in batch files, and can place them in an
  4011.       environment variable
  4012. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  4013.  
  4014. Format of ELRES history structure:
  4015. Offset    Size    Description
  4016.  00h    WORD    number of return codes which can be stored by following buffer
  4017.  02h    WORD    current position in buffer (treated as a ring)
  4018.  04h  N BYTEs    ELRES buffer
  4019. --------m-212B01CX444D-----------------------
  4020. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  4021.     AX = 2B01h
  4022.     CX = 444Dh ('DM')
  4023.     DX = 4158h ('AX')
  4024. Return: AX = 0000h if installed
  4025.         BX = version??? (0002h)
  4026.         CX = 4845h ('HE')
  4027.         DX = 5245h ('RE')
  4028.         ES = DOS-UP driver segment
  4029. --------T-212B01CX5441-----------------------
  4030. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  4031.     AX = 2B01h
  4032.     CX = 5441h ('TA')
  4033.     DX = 4D45h ('ME')
  4034. ---v2.60---
  4035.     BH = ???
  4036.         00h skip ???, else do
  4037. Return: AL = 02h if installed
  4038.     ES:DX -> data area in TAME-RES (see below)
  4039. Program: TAME is a shareware program by David G. Thomas which gives up CPU time
  4040.       to other partitions under a multitasker when the current partition's
  4041.       program incessantly polls the keyboard or system time
  4042.  
  4043. Format of TAME 2.10-2.20 data area:
  4044. Offset    Size    Description
  4045.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  4046.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  4047.  02h    DWORD    number of task switches
  4048.  06h    DWORD    number of keyboard polls
  4049.  0Ah    DWORD    number of time polls
  4050.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4051.  12h    DWORD    original INT 10h
  4052.  16h    DWORD    original INT 14h
  4053.  1Ah    DWORD    original INT 15h
  4054.  1Eh    DWORD    original INT 16h
  4055.  22h    DWORD    original INT 17h
  4056.  26h    DWORD    original INT 21h
  4057.  2Ah    DWORD    original INT 28h
  4058.  2Eh    WORD    offset of TAME INT 10h handler
  4059.  30h    WORD    offset of TAME INT 14h handler
  4060.  32h    WORD    offset of TAME INT 15h handler
  4061.  34h    WORD    offset of TAME INT 16h handler
  4062.  36h    WORD    offset of TAME INT 17h handler
  4063.  38h    WORD    offset of TAME INT 21h handler
  4064.  3Ah    WORD    offset of TAME INT 28h handler
  4065.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  4066.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  4067.  40h    WORD    number of polls remaining before next task switch
  4068.  42h    WORD    /KEYIDLE value
  4069.  44h    BYTE    interrupts already grabbed by TAME (see below)
  4070.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  4071.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  4072.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  4073.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  4074.  49h    BYTE    window or task number for this task
  4075.  4Ah    BYTE    multitasker type (see below)
  4076.  4Bh    BYTE    type of task switching selected
  4077.         bit 0: DESQview???
  4078.         bit 1: DoubleDOS???
  4079.         bit 2: TopView???
  4080.         bit 3: KeySwitch
  4081.         bit 4: HLT instruction
  4082.  4Ch    BYTE    ???
  4083.  4Dh    BYTE    flags
  4084.         bit 1: /FREQ instead of /MAX
  4085.  4Eh    BYTE    /FG: value
  4086.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  4087.  50h    BYTE    ???
  4088.  
  4089. Bitfields for interrupts already grabbed by TAME:
  4090. Bit(s)    Description
  4091.  0    INT 10h
  4092.  1    INT 14h
  4093.  2    INT 15h
  4094.  3    INT 16h
  4095.  4    INT 17h
  4096.  5    INT 21h
  4097.  6    INT 28h
  4098.  
  4099. Values for multitasker type:
  4100.  01h    DESQview
  4101.  02h    DoubleDOS
  4102.  03h    TopView
  4103.  04h    OmniView
  4104.  05h    VM/386
  4105.  
  4106. Bitfields for type of task switching selected:
  4107. Bit(s)    Description
  4108.  0    DESQview
  4109.  1    DoubleDOS
  4110.  2    TopView
  4111.  3    OmniView
  4112.  4    KeySwitch
  4113.  5    HLT instruction
  4114.  
  4115. Format of TAME 2.30 data area:
  4116. Offset    Size    Description
  4117.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  4118.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  4119.  02h    DWORD    number of task switches
  4120.  06h    DWORD    number of keyboard polls
  4121.  0Ah    DWORD    number of time polls
  4122.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4123.  12h    DWORD    time of last /CLEAR or TAME-RES load
  4124.  16h    DWORD    time yielded
  4125.  1Ah    DWORD    time spent polling
  4126.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  4127.  22h    DWORD    original INT 10h
  4128.  26h    DWORD    original INT 14h
  4129.  2Ah    DWORD    original INT 15h
  4130.  2Eh    DWORD    original INT 16h
  4131.  32h    DWORD    original INT 17h
  4132.  36h    DWORD    original INT 21h
  4133.  3Ah    DWORD    original INT 28h
  4134.  3Eh    WORD    offset of TAME INT 10h handler
  4135.  40h    WORD    offset of TAME INT 14h handler
  4136.  42h    WORD    offset of TAME INT 15h handler
  4137.  44h    WORD    offset of TAME INT 16h handler
  4138.  46h    WORD    offset of TAME INT 17h handler
  4139.  48h    WORD    offset of TAME INT 21h handler
  4140.  4Ah    WORD    offset of TAME INT 28h handler
  4141.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  4142.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  4143.  50h    WORD    number of polls remaining before next task switch
  4144.  52h    WORD    /KEYIDLE value
  4145.  54h    WORD    /FG: value
  4146.  56h    WORD    task switches left until next FGONLY DESQview API call
  4147.  58h    WORD    multitasker version
  4148.  5Ah    WORD    virtual screen segment
  4149.  5Ch    BYTE    interrupts already grabbed by TAME (see above)
  4150.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  4151.  5Eh    BYTE    window or task number for this task
  4152.  5Fh    BYTE    multitasker type (see above)
  4153.  60h    BYTE    type of task switching selected (bit flags) (see above)
  4154.  61h    BYTE    watch_DOS
  4155.  62h    BYTE    bit flags
  4156.         bit 0: TAME enabled
  4157.         bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  4158.         bit 2: /TIMEPOLL
  4159.         bit 3: /KEYPOLL
  4160.         bit 4: inhibit timer
  4161.         bit 5: enable status monitoring
  4162.  63h    BYTE    old status
  4163.  64h    WORD    signature DA34h
  4164.  
  4165. Format of TAME 2.60 data area:
  4166. Offset    Size    Description
  4167.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  4168.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  4169.  02h    DWORD    number of task switches
  4170.  06h    DWORD    number of keyboard polls
  4171.  0Ah    DWORD    number of time polls
  4172.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4173.  12h    DWORD    time of last /CLEAR or TAME-RES load
  4174.  16h    DWORD    time yielded
  4175.  1Ah    DWORD    time spent polling
  4176.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  4177.  22h  4 BYTEs    ???
  4178.  26h    DWORD    original INT 10h
  4179.  2Ah    DWORD    original INT 14h
  4180.  2Eh    DWORD    original INT 15h
  4181.  32h    DWORD    original INT 16h
  4182.  36h    DWORD    original INT 17h
  4183.  3Ah    DWORD    original INT 21h
  4184.  3Eh    DWORD    original INT 28h
  4185.  42h    WORD    offset of TAME INT 10h handler
  4186.  44h    WORD    offset of TAME INT 14h handler
  4187.  46h    WORD    offset of TAME INT 15h handler
  4188.  48h    WORD    offset of TAME INT 16h handler
  4189.  4Ah    WORD    offset of TAME INT 17h handler
  4190.  4Ch    WORD    offset of TAME INT 21h handler
  4191.  4Eh    WORD    offset of TAME INT 28h handler
  4192.  50h    WORD    X in /max:X,Y or /freq:X,Y
  4193.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  4194.  54h    WORD    number of polls remaining before next task switch
  4195.  56h    WORD    /KEYIDLE value
  4196.  58h  4 BYTEs    ???
  4197.  5Ch    WORD    X in /boost:X,Y
  4198.  5Eh    WORD    Y in /boost:X,Y
  4199.  60h    WORD    /FG: value
  4200.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  4201.  64h    WORD    multitasker version ???
  4202.  66h    WORD    virtual screen segment
  4203.  68h    BYTE    interrupts already grabbed by TAME (see above)
  4204.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  4205.  6Ah    BYTE    window or task number for this task
  4206.  6Bh    BYTE    multitasker type (see above)
  4207.  6Ch    BYTE    type of task switching selected (bit flags) (see above)
  4208.  6Dh    BYTE    watch_DOS
  4209.  6Eh    BYTE    bit flags
  4210.         bit 0: TAME enabled
  4211.         bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  4212.         bit 2: /TIMEPOLL
  4213.         bit 3: /KEYPOLL
  4214.         bit 4: inhibit timer
  4215.         bit 5: enable status monitoring
  4216.  6Fh    BYTE    old status
  4217.  70h    WORD    signature DA34h
  4218. --------v-212B16CX0643-----------------------
  4219. INT 21 - VIRUS - "Maltese Amoeba" - INSTALLATION CHECK
  4220.     AX = 2B16h
  4221.     CX = 0643h
  4222. Return: AX = 1603h if installed
  4223. --------R-212B44BX4D41-----------------------
  4224. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  4225.     AX = 2B44h ('D')
  4226.     BX = 4D41h ('MA')
  4227.     CX = 7063h ('pc')
  4228.     DX = 4157h ('AW')
  4229. Return: AX = 4F4Bh ('OK') if large host resident
  4230.        = 6F6Bh ('ok') if small host resident
  4231.     CX:DX -> API entry point
  4232. SeeAlso: INT 16/AH=79h
  4233.  
  4234. Call API entry point with:
  4235.     AX = 0000h get pcANYWHERE IV version
  4236.         DS:SI -> BYTE buffer for host type code
  4237.         Return: AH = version number
  4238.             AL = revision number
  4239.             DS:DI buffer byte filled with
  4240.             00h full-featured host
  4241.             01h limited-feature LAN host
  4242.             other API may not be supported
  4243.     AX = 0001h initialize operation
  4244.         DS:SI -> initialization request structure (see below)
  4245.         Return: AX = function status (see below)
  4246.     AX = 0002h get status
  4247.         Return: AH = current operating mode (see init req structure below)
  4248.             AL = current connection status
  4249.             bit 0: a physical connection is active
  4250.             bit 1: remove screen updating is active
  4251.             bit 2: connection checking is active
  4252.             bit 3: hot key detection is active
  4253.             bit 4: background file transfer is active
  4254.     AX = 0003h suspend remote screen updates
  4255.         Return: AX = function status (see below)
  4256.     AX = 0004h resume screen updates
  4257.         Return: AX = function status (see below)
  4258.     AX = 0005h end current remote access session
  4259.         DS:SI -> termination request structure (see below)
  4260.         Return: AX = function status (see below)
  4261.     AX = 0006h remove pcANYWHERE IV from memory
  4262.         Return: AX = status
  4263.             0000h successful
  4264.             FFD2h unable to release allocated memory
  4265.             FFD1h unable to release interrupt vectors
  4266.     AX = 8000h read data from communications channel
  4267.         DS:BX -> buffer
  4268.         CX = buffer size
  4269.         Return: AX >= number of characters read/available
  4270.             AX < 0 on error
  4271.     AX = 8001h write data to communications channel
  4272.         DS:BX -> buffer
  4273.         CX = buffer size
  4274.         Return: AX >= number of characters written
  4275.             AX < 0 on error
  4276.     AX = 8002h get connection status
  4277.         Return: AX = status
  4278.             > 0000h if connection active
  4279.             = 0000h if connection lost
  4280.             < 0000h on error
  4281.  
  4282. Format of initialization request structure:
  4283. Offset    Size    Description
  4284.  00h    BYTE    operating mode
  4285.         00h wait for a call
  4286.         01h hot key activates
  4287.         02h incoming call activates
  4288.         03h initiate a call
  4289.  01h  3 BYTEs    user ID to append to config file names
  4290.  04h    WORD    DS-relative pointer to path for config files
  4291.  06h    WORD    DS-relative pointer to path for program files
  4292.  
  4293. Format of termination request structure:
  4294. Offset    Size    Description
  4295.  00h    BYTE    operating mode after termination
  4296.         00h wait for a call
  4297.         01h hot key activates
  4298.         02h incoming call activates
  4299.         80h use current mode
  4300.         FFh remove from memory
  4301.  
  4302. Values for function status:
  4303.  0000h    function completed successfully
  4304.  FFF2h    unable to establish a connection when operating mode is
  4305.     "Initiate a call"
  4306.  FFF3h    modem configuration is invalid (corrupt config)
  4307.  FFF4h    modem initialization failed (no modem response)
  4308.  FFF5h    the communications device could not be initialized
  4309.  FFF6h    the host operator aborted the function
  4310.  FFF7h    the communications driver type specified in the configuration file is
  4311.     different than the one loaded when pcANYWHERE IV was initially started
  4312.  FFF9h    the configuration file is invalid
  4313.  FFFAh    the configuration file could not be found
  4314.  FFFBh    no session is active
  4315.  FFFCh    a remote access session is active
  4316.  FFFDh    the specified operating mode is invalid
  4317. ----------212B--CX6269-----------------------
  4318. INT 21 - WDTSR.COM - INSTALLATION CHECK
  4319.     AH = 2Bh
  4320.     CX = 6269h ('bi')
  4321.     DX = 742Dh ('t-')
  4322. Return: AL = FFh if not installed
  4323.     AL = 77h ('w') if WDTSR is installed
  4324.         CX = 6174h ('at')
  4325.         DX = 6368h ('ch')
  4326.         ES = resident code segment
  4327.         ES:DI -> identification and configuration data
  4328. Program: WDTSR is a driver for the bitWatch watchdog hardware by bit-design
  4329.       GmbH
  4330. SeeAlso: AH=2Bh/CX=6269h/DX=7449h,INT 14/AH=14h"FOSSIL",INT 15/AH=C3h
  4331. --------S-212B--CX6269-----------------------
  4332. INT 21 - bitFOSS - INSTALLATION CHECK
  4333.     AH = 2Bh
  4334.     CX = 6269h ('bi')
  4335.     DX = 7446h ('tF')
  4336. Return: AL = FFh if not installed
  4337.     AL = 4Fh ('O') if bitFOSS is installed
  4338.         CX = 5353h ('SS')
  4339.         DX = 494Ch ('IL')
  4340.         ES = resident code segment
  4341.         ES:DI -> identification data
  4342. Program: bitFOSS is a revision 5 FOSSIL driver
  4343. SeeAlso: AH=2Bh/CX=6269h/DX=7449h,INT 11/AH=BCh
  4344. --------S-212B--CX6269-----------------------
  4345. INT 21 - bitFOSSI - INSTALLATION CHECK
  4346.     AH = 2Bh
  4347.     CX = 6269h ('bi')
  4348.     DX = 7449h ('tI')
  4349. Return: AL = FFh if not installed
  4350.     AL = 53h ('S') if bitFOSSI is installed
  4351.         CX = 444Eh ('DN')
  4352.         DX = 2D46h ('-F')
  4353.         ES = resident code segment
  4354.         ES:DI -> identification data
  4355. Program: bitFOSSI is a revision 5 FOSSIL driver for ???'s ISDN board
  4356. SeeAlso: AH=2Bh/CX=6269h/DX=7446h,INT 11/AH=BCh
  4357. --------D-212C-------------------------------
  4358. INT 21 - DOS 1+ - GET SYSTEM TIME
  4359.     AH = 2Ch
  4360. Return: CH = hour
  4361.     CL = minute
  4362.     DH = second
  4363.     DL = 1/100 seconds
  4364. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  4365.       so returned times generally do not increment by 1
  4366.     on some systems, DL may always return 00h
  4367. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  4368. SeeAlso: INT 2F/AX=120Dh
  4369. --------D-212D-------------------------------
  4370. INT 21 - DOS 1+ - SET SYSTEM TIME
  4371.     AH = 2Dh
  4372.     CH = hour
  4373.     CL = minute
  4374.     DH = second
  4375.     DL = 1/100 seconds
  4376. Return: AL = result
  4377.         00h successful
  4378.         FFh invalid time, system time unchanged
  4379. Note:    DOS 3.3+ also sets CMOS clock
  4380. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  4381. --------T-212D01CX7820-----------------------
  4382. INT 21 - PC-Mix - INSTALLATION CHECK
  4383.     AX = 2D01h
  4384.     CX = 7820h ('X ')
  4385.     DX = 6D69h ('MI')
  4386. Return: AL = 00h if installed
  4387. --------D-212E--DL00-------------------------
  4388. INT 21 - DOS 1+ - SET VERIFY FLAG
  4389.     AH = 2Eh
  4390.     DL = 00h (DOS 1.x/2.x only)
  4391.     AL = new state of verify flag
  4392.         00h off
  4393.         01h on
  4394. Notes:    default state at system boot is OFF
  4395.     when ON, all disk writes are verified provided the device driver
  4396.       supports read-after-write verification
  4397. SeeAlso: AH=54h
  4398. --------D-212F-------------------------------
  4399. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  4400.     AH = 2Fh
  4401. Return: ES:BX -> current DTA
  4402. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  4403. SeeAlso: AH=1Ah
  4404. --------D-2130-------------------------------
  4405. INT 21 - DOS 2+ - GET DOS VERSION
  4406.     AH = 30h
  4407. ---DOS 5+ ---
  4408.     AL = what to return in BH
  4409.         00h OEM number (as for DOS 2.0-4.0x)
  4410.         01h version flag
  4411. Return: AL = major version number (00h if DOS 1.x)
  4412.     AH = minor version number
  4413.     BL:CX = 24-bit user serial number (most versions do not use this)
  4414. ---if DOS <5 or AL=00h---
  4415.     BH = MS-DOS OEM number (see below)
  4416. ---if DOS 5+ and AL=01h---
  4417.     BH = version flag
  4418.         bit 3: DOS is in ROM
  4419.         other: reserved (0)
  4420. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  4421.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  4422.     the Windows/NT DOS box returns version 5.00, subject to SETVER
  4423.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  4424.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  4425.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  4426.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  4427.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  4428.       IBM DOS 6.0)
  4429.     DR-DOS 5.0 and 6.0 report version 3.31; Novell DOS 7 reports v6.00.
  4430.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  4431.       as PC-DOS by returning OEM number 00h
  4432.     the version returned under DOS 4.0x may be modified by entries in
  4433.       the special program list (see AH=52h); the version returned under
  4434.       DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  4435.       version number
  4436. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  4437. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
  4438.  
  4439. Values for DOS OEM number:
  4440.  00h    IBM
  4441.  01h    Compaq
  4442.  02h    MS Packaged Product
  4443.  04h    AT&T
  4444.  05h    Zenith
  4445.  06h    Hewlett-Packard
  4446.  0Dh    Packard-Bell
  4447.  16h    DEC
  4448.  23h    Olivetti
  4449.  29h    Toshiba
  4450.  33h    Novell (Windows/386 device IDs only)
  4451.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  4452.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  4453.  4Dh    Hewlett-Packard
  4454.  66h    PhysTechSoft (PTS-DOS)
  4455.  99h    General Software's Embedded DOS
  4456.  EEh    DR-DOS
  4457.  EFh    Novell DOS
  4458.  FFh    Microsoft, Phoenix
  4459. --------E-2130-------------------------------
  4460. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  4461.     AH = 30h
  4462.     EAX = 00003000h
  4463.     EBX = 50484152h ("PHAR")
  4464. Return: AL = major DOS version
  4465.     AH = minor DOS version
  4466.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  4467.         BL = ASCII major version number
  4468.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  4469.         EDX = address of GDA
  4470. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  4471. --------v-2130--DXABCD-----------------------
  4472. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  4473.     AH = 30h
  4474.     DX = ABCDh
  4475. Return: DX = DCBAh if installed
  4476. SeeAlso: AX=0D20h,AX=30F1h
  4477. --------T-213000BX1234-----------------------
  4478. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  4479.     AX = 3000h
  4480.     BX = 1234h
  4481.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  4482. Return: AL = DOS major version
  4483.     AH = DOS minor version
  4484.     CX:BX -> Ctask global data block
  4485. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  4486. Note:    if first eight bytes of returned data block equal eight bytes passed
  4487.       in, CTask is resident
  4488. --------O-213000BX3000-----------------------
  4489. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  4490.     AX = 3000h
  4491.     BX = 3000h
  4492.     CX = DX = 3000h
  4493. Return: AX = PC-MOS version
  4494. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  4495.       system by The Software Link, Inc.
  4496. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  4497. --------G-213022-----------------------------
  4498. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  4499.     AX = 3022h
  4500. Return: AX = DOS version (see AH=30h)
  4501.     CX = 1112h if StopPrg installed
  4502.         BX = segment of resident code
  4503. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  4504. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  4505.       0000h:04FEh
  4506. --------v-2130F1-----------------------------
  4507. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  4508.     AX = 30F1h
  4509. Return: AL = 00h if resident
  4510. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  4511. ----------2130FFCX4445-----------------------
  4512. INT 21 - DESQ??? - INSTALLATION CHECK
  4513.     AX = 30FFh
  4514.     CX = 4445h ("DE")
  4515.     DX = 5351h ("SQ")
  4516. Return: BH = 05h if installed
  4517.     ???
  4518. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  4519.       DESQview, so it may be for DESQview's precursor DESQ.
  4520. SeeAlso: AX=4404h"DUBLDISK"
  4521. --------D-2131-------------------------------
  4522. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  4523.     AH = 31h
  4524.     AL = return code
  4525.     DX = number of paragraphs to keep resident
  4526. Return: never
  4527. Notes:    the value in DX only affects the memory block containing the PSP;
  4528.       additional memory allocated via AH=48h is not affected
  4529.     the minimum number of paragraphs which will remain resident is 11h
  4530.       for DOS 2.x and 06h for DOS 3+
  4531.     most TSRs can save some memory by releasing their environment block
  4532.       before terminating (see AH=26h,AH=49h)
  4533. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  4534. --------D-2132-------------------------------
  4535. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  4536.     AH = 32h
  4537.     DL = drive number (00h = default, 01h = A:, etc)
  4538. Return: AL = status
  4539.         00h successful
  4540.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  4541.         FFh invalid or network drive
  4542. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  4543.       except for the DWORD at offset 12h
  4544.     this call updates the DPB by reading the disk; the DPB may be accessed
  4545.       via the DOS list of lists (see AH=52h) if disk access is not
  4546.       desirable.
  4547.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  4548.       of the DPB has been documented, however
  4549.     supported by DR-DOS 3.41+; DR-DOS 3.41-6.0 return the same data as
  4550.       MS-DOS 3.31
  4551. SeeAlso: AH=1Fh,AH=52h
  4552.  
  4553. Format of DOS Drive Parameter Block:
  4554. Offset    Size    Description
  4555.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  4556.  01h    BYTE    unit number within device driver
  4557.  02h    WORD    bytes per sector
  4558.  04h    BYTE    highest sector number within a cluster
  4559.  05h    BYTE    shift count to convert clusters into sectors
  4560.  06h    WORD    number of reserved sectors at beginning of drive
  4561.  08h    BYTE    number of FATs
  4562.  09h    WORD    number of root directory entries
  4563.  0Bh    WORD    number of first sector containing user data
  4564.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  4565.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  4566.  0Fh    BYTE    number of sectors per FAT
  4567.  10h    WORD    sector number of first directory sector
  4568.  12h    DWORD    address of device driver header
  4569.  16h    BYTE    media ID byte
  4570.  17h    BYTE    00h if disk accessed, FFh if not
  4571.  18h    DWORD    pointer to next DPB
  4572. ---DOS 2.x---
  4573.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  4574.         FFFFh = unknown
  4575.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  4576. ---DOS 3.x---
  4577.  1Ch    WORD    cluster at which to start search for free space when writing
  4578.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  4579. ---DOS 4.0-6.0---
  4580.  0Fh    WORD    number of sectors per FAT
  4581.  11h    WORD    sector number of first directory sector
  4582.  13h    DWORD    address of device driver header
  4583.  17h    BYTE    media ID byte
  4584.  18h    BYTE    00h if disk accessed, FFh if not
  4585.  19h    DWORD    pointer to next DPB
  4586.  1Dh    WORD    cluster at which to start search for free space when writing,
  4587.         usually the last cluster allocated
  4588.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  4589. --------D-2133-------------------------------
  4590. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  4591.     AH = 33h
  4592.     AL = subfunction
  4593.         00h get current extended break state
  4594.         Return: DL = current state, 00h = off, 01h = on
  4595.         01h set state of extended ^C/^Break checking
  4596.         DL = new state
  4597.             00h off, check only on character I/O functions
  4598.             01h on, check on all DOS functions
  4599.         Return: (Novell DOS 7) DL = old state of extended Break checks
  4600. Note:    under DOS 3.1+ and DR-DOS, this function does not use any of the
  4601.       DOS-internal stacks and may thus be called at any time
  4602. SeeAlso: AX=3302h
  4603. --------D-213302-----------------------------
  4604. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  4605.     AX = 3302h
  4606.     DL = new state (00h for OFF, 01h for ON)
  4607. Return: DL = old state of extended BREAK checking
  4608. Notes:    this function does not use any of the DOS-internal stacks and may thus
  4609.       be called at any time; one possible use is modifying Control-Break
  4610.       checking from within an interrupt handler or TSR
  4611.     not supported by DR-DOS through version 6.0; newly-supported by
  4612.       Novell DOS 7
  4613. SeeAlso: AH=33h
  4614. --------D-213303-----------------------------
  4615. INT 21 - DOS 4+ - UNUSED
  4616.     AX = 3303h
  4617. Return: nothing
  4618. Note:    this function and AX=3304h were apparently intended to support a
  4619.       code-page switching flag for OS/2 compatibility (OS/2 allows a file
  4620.       to have a code page as an attribute); however, this function has
  4621.       always been a NOP in public releases of DOS.    See _DOS_Internals_
  4622.       Chapter 2 for more information
  4623. SeeAlso: AX=3304h
  4624. --------D-213304-----------------------------
  4625. INT 21 - DOS 4+ - UNUSED
  4626.     AX = 3304h
  4627. Return: nothing
  4628. Note:    this function and AX=3303h were apparently intended to support a
  4629.       code-page switching flag for OS/2 compatibility (OS/2 allows a file
  4630.       to have a code page as an attribute); however, this function has
  4631.       always been a NOP in public releases of DOS.    See _DOS_Internals_
  4632.       Chapter 2 for more information
  4633. SeeAlso: AX=3303h
  4634. --------D-213305-----------------------------
  4635. INT 21 - DOS 4+ - GET BOOT DRIVE
  4636.     AX = 3305h
  4637. Return: DL = boot drive (1=A:,...)
  4638. Notes:    fully reentrant
  4639.     NEC 9800-series PCs always call the boot drive A: and assign the other
  4640.       drive letters sequentially to the other drives in the system
  4641. --------D-213306-----------------------------
  4642. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  4643.     AX = 3306h
  4644. Return: BL = major version
  4645.     BH = minor version
  4646.     DL = revision (bits 2-0, all others 0)
  4647.     DH = version flags
  4648.         bit 3: DOS is in ROM
  4649.         bit 4: DOS is in HMA
  4650.     AL = FFh if true DOS version < 5.0
  4651. Notes:    this function always returns the true version number, unlike AH=30h,
  4652.       whose return value may be changed with SETVER
  4653.     because of the conflict from the CBIS PowerLAN redirector (see next
  4654.       entry), programs should check whether BH is less than 100 (64h)
  4655.       and BL is at least 5 before accepting the returned BX as the true
  4656.       version number; however, even this is not entirely reliable when
  4657.       that redirector is loaded
  4658.     fully reentrant
  4659.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  4660.     the Windows NT DOS box returns BX=3205h (version 5.50)
  4661.     Novell DOS 7 returns version 6.00
  4662. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  4663.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  4664.       for invalid subfunctions
  4665. SeeAlso: AH=30h,INT 2F/AX=122Fh
  4666. --------N-213306-----------------------------
  4667. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  4668.     AX = 3306h
  4669. Return: AX = 3306h
  4670.     BL = ??? (usually 00h)
  4671.     BH = ??? (usually 00h or FFh)
  4672. Note:    unknown function, is in conflict with DOS 5+ version call
  4673. SeeAlso: AX=3306h"DOS"
  4674. --------v-21330F-----------------------------
  4675. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  4676.     AX = 330Fh
  4677. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  4678. SeeAlso: AX=30F1h,AX=33E0h
  4679. --------k-213341-----------------------------
  4680. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  4681.     AX = 3341h
  4682. Return: DX = 1234h if installed
  4683.         CX = resident code segment
  4684. Program: Diet Disk is a public domain transparent data file compressor by
  4685.       Barry Nance
  4686. --------v-2133E0-----------------------------
  4687. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  4688.     AX = 33E0h
  4689. Return: AL = E0h if resident (DOS returns AL=FFh)
  4690. SeeAlso: AX=330Fh,AX=357Fh
  4691. --------D-2134-------------------------------
  4692. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  4693.     AH = 34h
  4694. Return: ES:BX -> one-byte InDOS flag
  4695. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  4696.       and decremented whenever one completes
  4697.     during an INT 28 call, it is safe to call some INT 21 functions even
  4698.       though InDOS may be 01h instead of zero
  4699.     InDOS alone is not sufficient for determining when it is safe to
  4700.       enter DOS, as the critical error handling decrements InDOS and
  4701.       increments the critical error flag for the duration of the critical
  4702.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  4703.       busy.
  4704.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  4705.       then zeros it on completion
  4706.     the critical error flag is the byte immediately following InDOS in
  4707.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ and
  4708.       DR-DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  4709.       is located 1AAh bytes BEFORE the critical section flag)
  4710.     for DOS 3.1+, an undocumented call exists to get the address of the
  4711.       critical error flag (see AX=5D06h)
  4712.     this function was undocumented prior to the release of DOS 5.0.
  4713. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  4714. --------D-2135-------------------------------
  4715. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  4716.     AH = 35h
  4717.     AL = interrupt number
  4718. Return: ES:BX -> current interrupt handler
  4719. Note:    under DR-DOS 5.0+, this function does not use any of the DOS-internal
  4720.       stacks and may thus be called at any time
  4721. SeeAlso: AH=25h,AX=2503h
  4722. --------E-213501-----------------------------
  4723. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  4724.     AX = 3501h
  4725. Return: CF clear if successful
  4726.         BX = new selector
  4727.     CF set on error (no more selectors available)
  4728. Note:    the new selector will be an expand-up read/write data selector with
  4729.       undefined base and limit
  4730. SeeAlso: AX=3502h,INT 31/AX=0000h
  4731. --------E-213502-----------------------------
  4732. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  4733.     AX = 3502h
  4734.     BX = selector
  4735. Return: CF clear if successful
  4736.     CF set on error (invalid selector)
  4737. Note:    only selectors allocated via AX=3501h should be deallocated
  4738. SeeAlso: AX=3501h,INT 31/AX=0001h
  4739. --------E-213503-----------------------------
  4740. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  4741.     AX = 3503h
  4742.     BX = selector
  4743.     ECX = base address
  4744. Return: CF clear if successful
  4745.     CF set on error (invalid selector)
  4746. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  4747. --------E-213504-----------------------------
  4748. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  4749.     AX = 3504h
  4750.     BX = selector
  4751. Return: CF clear if successful
  4752.         ECX = absolute base address of selector
  4753.     CF set on error (invalid selector)
  4754. SeeAlso: AX=3503h,INT 31/AX=0006h
  4755. --------E-213505-----------------------------
  4756. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  4757.     AX = 3505h
  4758.     BX = selector
  4759.     ECX = desired limit
  4760. Return: CF clear if successful
  4761.         ECX = actual limit set
  4762.     CF set on error (no more selectors available)
  4763. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  4764.       limit is greater than 1MB
  4765. SeeAlso: AX=3503h,INT 31/AX=0008h
  4766. --------E-21350A-----------------------------
  4767. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  4768.     AX = 350Ah
  4769.     EBX = absolute physical address
  4770.     ECX = size in bytes of area to map
  4771. Return: CF clear if successful
  4772.     CF set on error (insufficient memory or service refused by DPMI host)
  4773. Notes:    should not make repeated calls for the same physical address
  4774.     there is no provision for unmapping memory
  4775. --------E-21350B-----------------------------
  4776. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  4777.     AX = 350Bh
  4778.     DS = default selector for DS
  4779. Return: CF clear
  4780.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  4781. SeeAlso: AX=350Ch
  4782. --------E-21350C-----------------------------
  4783. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  4784.     AX = 350Ch
  4785.     ECX = size of block in bytes
  4786.     DS = default DS
  4787. Return: CF clear if successful
  4788.         EAX = near pointer to new block
  4789.         EDX = new lowest legal value for stack
  4790.     CF set on error (requested size not multiple of 4K)
  4791. SeeAlso: AX=350Bh,AX=350Dh
  4792. --------E-21350D-----------------------------
  4793. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  4794.     AX = 350Dh
  4795.     EBX = current ESP value
  4796.     ECX = size of block in bytes
  4797.     DS = default DS
  4798. Return: CF clear if successful
  4799.         EBX = new value for ESP
  4800.         EDX = suggested new limit for SS
  4801.     CF set on error
  4802. Note:    this function should only be called once during initialization
  4803. SeeAlso: AX=350Bh,AX=350Ch
  4804. --------v-21357F-----------------------------
  4805. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  4806.     AX = 357Fh
  4807. Return: DX = FFFFh if installed
  4808. SeeAlso: AX=33E0h,AX=3DFFh
  4809. --------D-2136-------------------------------
  4810. INT 21 - DOS 2+ - GET FREE DISK SPACE
  4811.     AH = 36h
  4812.     DL = drive number (00h = default, 01h = A:, etc)
  4813. Return: AX = FFFFh if invalid drive
  4814.     else
  4815.         AX = sectors per cluster
  4816.         BX = number of free clusters
  4817.         CX = bytes per sector
  4818.         DX = total clusters on drive
  4819. Notes:    free space on drive in bytes is AX * BX * CX
  4820.     total space on drive in bytes is AX * CX * DX
  4821.     "lost clusters" are considered to be in use
  4822.     according to Dave Williams' MS-DOS reference, the value in DX is
  4823.       incorrect for non-default drives after ASSIGN is run
  4824. SeeAlso: AH=1Bh,AH=1Ch
  4825. --------D-213700-----------------------------
  4826. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  4827.     AX = 3700h
  4828. Return: AL = status
  4829.         00h successful
  4830.         DL = current switch character
  4831.         FFh unsupported subfunction
  4832. Desc:    Determine the character which is used to introduce command switches.
  4833.       This setting is ignored by DOS commands in version 4.0 and higher,
  4834.       but is honored by many third-party programs.
  4835. Notes:    documented in some OEM versions of some releases of DOS
  4836.     supported by OS/2 compatibility box
  4837.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+
  4838. SeeAlso: AX=3701h
  4839. --------D-213701-----------------------------
  4840. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  4841.     AX = 3701h
  4842.     DL = new switch character
  4843. Return: AL = status
  4844.         00h successful
  4845.         FFh unsupported subfunction
  4846. Notes:    documented in some OEM versions of some releases of DOS
  4847.     supported by OS/2 compatibility box
  4848.     ignored by MS-DOS 5+ and DR-DOS 3.41+; DR-DOS 6.0 leaves AX unchanged
  4849. SeeAlso: AX=3700h
  4850. --------D-2137-------------------------------
  4851. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  4852.     AH = 37h
  4853.     AL = subfunction
  4854.         02h get availdev flag
  4855.         Return: DL = 00h \DEV\ must precede character device names
  4856.                = nonzero \DEV\ is optional
  4857.         03h set availdev flag
  4858.         DL = 00h    \DEV\ is mandatory
  4859.            = nonzero    \DEV\ is optional
  4860. Return: AL = status
  4861.         00h successful
  4862.         FFh unsupported subfunction
  4863. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  4864.       names without generating an error even if the directory \DEV does
  4865.       not actually exist (other paths generate an error if they do not
  4866.       exist).
  4867.     although MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no
  4868.       effect, and AL=02h always returns DL=FFh
  4869. --------k-2137D0BX899D-----------------------
  4870. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  4871.     AX = 37D0h
  4872.     BX = 899Dh ('DI' + 'ET')
  4873. Return: AL = FFh if not present as TSR (default return value from DOS)
  4874.     AX = 0000h if installed as a TSR
  4875.         CX = 899Dh
  4876.         DX = version ID
  4877. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4878. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  4879. --------k-2137D1BX899D-----------------------
  4880. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  4881.     AX = 37D1h
  4882.     BX = 899Dh ('DI' + 'ET')
  4883. Return: AX = 0000h
  4884.     CX = code segment of TSR part of DIET.EXE
  4885.     DX = memory block segment of TSR DIET.EXE
  4886.         (0000h if installed as device driver)
  4887. SeeAlso: AX=37D0h,AX=37DFh
  4888. --------k-2137D2BX899D-----------------------
  4889. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  4890.     AX = 37D2h
  4891.     BX = 899Dh ('DI' + 'ET')
  4892. Return: AX = 0000h
  4893.     DL = control flag (00h active, else disabled)
  4894.     DH = skip flag (nonzero while TSR active)
  4895. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  4896. --------k-2137D3BX899D-----------------------
  4897. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  4898.     AX = 37D3h
  4899.     BX = 899Dh ('DI' + 'ET')
  4900.     DL = control flag (00h active, else disabled)
  4901.     DH = skip flag (00h)
  4902. Return: AX = 0000h
  4903. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  4904. --------k-2137D4BX899D-----------------------
  4905. INT 21 - DIET v1.43e - GET TSR OPTIONS
  4906.     AX = 37D4h
  4907.     BX = 899Dh ('DI' + 'ET')
  4908. Return: AX = 0000h
  4909.     DX = TSR options (see below)
  4910. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  4911.  
  4912. Bitfields for TSR options:
  4913. Bit(s)    Description
  4914.  0    automated compression of DIETed file
  4915.  1    automated compression of newly-created file
  4916.  2    suppress DIET message
  4917.  3    display original file size
  4918.  4-15    reserved (0)
  4919. --------k-2137D5BX899D-----------------------
  4920. INT 21 - DIET v1.43e - SET TSR OPTIONS
  4921.     AX = 37D5h
  4922.     BX = 899Dh ('DI' + 'ET')
  4923.     DX = TSR options (see AX=37D4h)
  4924. Return: AX = 0000h
  4925. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4926. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  4927. --------k-2137D6BX899D-----------------------
  4928. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  4929.     AX = 37D6h
  4930.     BX = 899Dh ('DI' + 'ET')
  4931. Return: AX = 0000h
  4932.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  4933. SeeAlso: AX=37D0h,AX=37D7h
  4934. --------k-2137D7BX899D-----------------------
  4935. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  4936.     AX = 37D7h
  4937.     BX = 899Dh ('DI' + 'ET')
  4938.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  4939.         0000h:0000h for current directory
  4940. Return: AX = 0000h
  4941. Note:    the specified directory name must include a drive letter and end with
  4942.       a backslash
  4943. SeeAlso: AX=37D0h,AX=37D6h
  4944. --------k-2137DCBX899D-----------------------
  4945. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  4946.     AX = 37DCh
  4947.     BX = 899Dh ('DI' + 'ET')
  4948.     DS:DX -> external procedure
  4949. Return: AX = 0000h
  4950. Note:    the resident code will call the specified external procedure at the
  4951.       beginning of decompression and when compression is exited on failure
  4952. SeeAlso: AX=37DDh
  4953.  
  4954. External procedure called with:
  4955.     STACK:    WORD    class
  4956.             FFFDh creation failed for unknown reasons
  4957.             FFFEh creation failed due to lack of space
  4958.             FFFFh file creation error
  4959.             else file handle of DIETed file to be decompressed
  4960.         DWORD    -> compressed filename
  4961.         DWORD    -> decompressed or temporary filename
  4962. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  4963. --------k-2137DDBX899D-----------------------
  4964. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  4965.     AX = 37DDh
  4966.     BX = 899Dh ('DI' + 'ET')
  4967. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4968. Note:    unlinks the external procedure specified by AX=37DCh
  4969. SeeAlso: AX=37DCh
  4970. --------k-2137DEBX899D-----------------------
  4971. INT 21 - DIET v1.43e - READ EMS STATUS
  4972.     AX = 37DEh
  4973.     BX = 899Dh ('DI' + 'ET')
  4974. Return: AX = 0000h
  4975.     CX = EMS status
  4976.         0000h not used
  4977.         0001h used as work area
  4978.         0002h used for code and as work area
  4979.     DX = EMM handle when EMS is in use
  4980. --------k-2137DFBX899D-----------------------
  4981. INT 21 - DIET v1.43e - UNLOAD TSR
  4982.     AX = 37DFh
  4983.     BX = 899Dh ('DI' + 'ET')
  4984. Return: AX = status
  4985.         0000h successful
  4986.         00FFh failed
  4987. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4988. SeeAlso: AX=37D0h
  4989. Index:    uninstall;DIET
  4990. --------D-2138-------------------------------
  4991. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  4992.     AH = 38h
  4993. --DOS 2.x--
  4994.     AL = 00h get current-country info
  4995.     DS:DX -> buffer for returned info (see below)
  4996. Return: CF set on error
  4997.         AX = error code (02h)
  4998.     CF clear if successful
  4999.         AX = country code (MS-DOS 2.11 only)
  5000.         buffer at DS:DX filled
  5001. --DOS 3+--
  5002.     AL = 00h for current country
  5003.     AL = 01h thru 0FEh for specific country with code <255
  5004.     AL = 0FFh for specific country with code >= 255
  5005.        BX = 16-bit country code
  5006.     DS:DX -> buffer for returned info (see below)
  5007. Return: CF set on error
  5008.         AX = error code (02h)
  5009.     CF clear if successful
  5010.         BX = country code
  5011.         DS:DX buffer filled
  5012. Note:    this function is not supported by the Borland DPMI host, but no error
  5013.       is returned; as a workaround, one should allocate a buffer in
  5014.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  5015.       INT 31/AX=0300h
  5016. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  5017.  
  5018. Format of DOS 2.00-2.10 country info:
  5019. Offset    Size    Description
  5020.  00h    WORD    date format  0 = USA    mm dd yy
  5021.                  1 = Europe dd mm yy
  5022.                  2 = Japan    yy mm dd
  5023.  02h    BYTE    currency symbol
  5024.  03h    BYTE    00h
  5025.  04h    BYTE    thousands separator char
  5026.  05h    BYTE    00h
  5027.  06h    BYTE    decimal separator char
  5028.  07h    BYTE    00h
  5029.  08h 24 BYTEs    reserved
  5030.  
  5031. Format of DOS 2.11+ country info:
  5032. Offset    Size    Description
  5033.  00h    WORD    date format (see above)
  5034.  02h  5 BYTEs    ASCIZ currency symbol string
  5035.  07h  2 BYTEs    ASCIZ thousands separator
  5036.  09h  2 BYTEs    ASCIZ decimal separator
  5037.  0Bh  2 BYTEs    ASCIZ date separator
  5038.  0Dh  2 BYTEs    ASCIZ time separator
  5039.  0Fh    BYTE    currency format
  5040.         bit 2 = set if currency symbol replaces decimal point
  5041.         bit 1 = number of spaces between value and currency symbol
  5042.         bit 0 = 0 if currency symbol precedes value
  5043.             1 if currency symbol follows value
  5044.  10h    BYTE    number of digits after decimal in currency
  5045.  11h    BYTE    time format
  5046.         bit 0 = 0 if 12-hour clock
  5047.             1 if 24-hour clock
  5048.  12h    DWORD    address of case map routine
  5049.         (FAR CALL, AL = character to map to upper case [>= 80h])
  5050.  16h  2 BYTEs    ASCIZ data-list separator
  5051.  18h 10 BYTEs    reserved
  5052.  
  5053. Values for country code:
  5054.  001h    United States
  5055.  002h    Canadian-French
  5056.  003h    Latin America
  5057.  01Fh    Netherlands
  5058.  020h    Belgium
  5059.  021h    France
  5060.  022h    Spain
  5061.  024h    Hungary (not supported by DR-DOS 5.0)
  5062.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  5063.  027h    Italy
  5064.  029h    Switzerland
  5065.  02Ah    Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
  5066.  02Bh    Austria (DR-DOS 5.0)
  5067.  02Ch    United Kingdom
  5068.  02Dh    Denmark
  5069.  02Eh    Sweden
  5070.  02Fh    Norway
  5071.  030h    Poland (not supported by DR-DOS 5.0)
  5072.  031h    Germany
  5073.  037h    Brazil (not supported by DR-DOS 5.0)
  5074.  03Dh    International English [Australia in DR-DOS 5.0]
  5075.  051h    Japan (DR-DOS 5.0, MS-DOS 5.0+)
  5076.  052h    Korea (DR-DOS 5.0)
  5077.  056h    China (MS-DOS 5.0+)
  5078.  058h    Taiwan (MS-DOS 5.0+)
  5079.  05Ah    Turkey (MS-DOS 5.0+)
  5080.  15Fh    Portugal
  5081.  162h    Iceland
  5082.  166h    Finland
  5083.  311h    Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
  5084.  3CCh    Israel (DR-DOS 5.0,MS-DOS 5.0+)
  5085. --------D-2138--DXFFFF-----------------------
  5086. INT 21 - DOS 3+ - SET COUNTRY CODE
  5087.     AH = 38h
  5088.     DX = FFFFh
  5089.     AL = 01h thru FEh for specific country with code <255
  5090.     AL = FFh for specific country with code >= 255
  5091.        BX = 16-bit country code (see AH=38h)
  5092. Return: CF set on error
  5093.         AX = error code (see AH=59h)
  5094.     CF clear if successful
  5095. Note:    not supported by OS/2
  5096. SeeAlso: INT 2F/AX=1403h
  5097. --------D-2139-------------------------------
  5098. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  5099.     AH = 39h
  5100.     DS:DX -> ASCIZ pathname
  5101. Return: CF clear if successful
  5102.         AX destroyed
  5103.     CF set on error
  5104.         AX = error code (03h,05h) (see AH=59h)
  5105. Notes:    all directories in the given path except the last must exist
  5106.     fails if the parent directory is the root and is full
  5107.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  5108.       it is not possible to make that directory the current directory
  5109.       because the path would exceed 64 characters
  5110.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5111. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AH=71h,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  5112. --------D-213A-------------------------------
  5113. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  5114.     AH = 3Ah
  5115.     DS:DX -> ASCIZ pathname of directory to be removed
  5116. Return: CF clear if successful
  5117.         AX destroyed
  5118.     CF set on error
  5119.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  5120. Notes:    directory must be empty (contain only '.' and '..' entries)
  5121.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5122. SeeAlso: AH=39h,AH=3Bh,AH=71h,AH=E2h/SF=0Bh,INT 2F/AX=1101h
  5123. --------D-213B-------------------------------
  5124. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  5125.     AH = 3Bh
  5126.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  5127. Return: CF clear if successful
  5128.         AX destroyed
  5129.     CF set on error
  5130.         AX = error code (03h) (see AH=59h)
  5131. Notes:    if new directory name includes a drive letter, the default drive is
  5132.       not changed, only the current directory on that drive
  5133.     changing the current directory also changes the directory in which
  5134.       FCB file calls operate
  5135.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5136. SeeAlso: AH=47h,AH=71h,INT 2F/AX=1105h
  5137. --------D-213C-------------------------------
  5138. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  5139.     AH = 3Ch
  5140.     CX = file attributes (see below)
  5141.     DS:DX -> ASCIZ filename
  5142. Return: CF clear if successful
  5143.         AX = file handle
  5144.     CF set on error
  5145.         AX = error code (03h,04h,05h) (see AH=59h)
  5146. Notes:    if a file with the given name exists, it is truncated to zero length
  5147.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5148.     DR-DOS checks the system password or explicitly supplied password at
  5149.       the end of the filename against the reserved field in the directory
  5150.       entry before allowing access
  5151. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  5152.  
  5153. Bitfields for file attributes:
  5154. Bit(s)    Description
  5155.  0    read-only
  5156.  1    hidden
  5157.  2    system
  5158.  3    volume label (ignored)
  5159.  4    reserved, must be zero (directory)
  5160.  5    archive bit
  5161.  7    if set, file is shareable under Novell NetWare
  5162. --------D-213D-------------------------------
  5163. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  5164.     AH = 3Dh
  5165.     AL = access and sharing modes (see below)
  5166.     DS:DX -> ASCIZ filename
  5167.     CL = attribute mask of files to look for (server call only)
  5168. Return: CF clear if successful
  5169.         AX = file handle
  5170.     CF set on error
  5171.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see AH=59h)
  5172. Notes:    file pointer is set to start of file
  5173.     file handles which are inherited from a parent also inherit sharing
  5174.       and access restrictions
  5175.     files may be opened even if given the hidden or system attributes
  5176.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5177.     DR-DOS checks the system password or explicitly supplied password at
  5178.       the end of the filename against the reserved field in the directory
  5179.       entry before allowing access
  5180.     sharing modes are only effective on local drives if SHARE is loaded
  5181. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  5182.  
  5183. Bitfields for access and sharing modes:
  5184. Bit(s)    Description
  5185.  2-0    access mode
  5186.     000 read only
  5187.     001 write only
  5188.     010 read/write
  5189.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  5190.         case-sensitive filenames
  5191.  3    reserved (0)
  5192.  6-4    sharing mode (DOS 3+)
  5193.     000 compatibility mode
  5194.     001 "DENYALL" prohiboth read and write access by others
  5195.     010 "DENYWRITE" prohiwrite access by others
  5196.     011 "DENYREAD" prohiread access by others
  5197.     100 "DENYNONE" allow full access by others
  5198.     111 network FCB (only available during server call)
  5199.  7    inheritance
  5200.     if set, file is private to current process and will not be inherited
  5201.       by child processes
  5202.  
  5203. File sharing behavior:
  5204.       |    Second and subsequent Opens
  5205.  First      |Compat  Deny      Deny     Deny    Deny
  5206.  Open      |       All      Write     Read    None
  5207.       |R W RW R W RW R W RW R W RW R W RW
  5208.  - - - - -| - - - - - - - - - - - - - - - - -
  5209.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  5210.     W |Y Y Y  N N N     N N N    N N N  N N N
  5211.     RW|Y Y Y  N N N     N N N    N N N  N N N
  5212.  - - - - -|
  5213.  Deny    R |C C C  N N N     N N N    N N N  N N N
  5214.  All    W |C C C  N N N     N N N    N N N  N N N
  5215.     RW|C C C  N N N     N N N    N N N  N N N
  5216.  - - - - -|
  5217.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  5218.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  5219.     RW|C C C  N N N     N N N    N N N  Y N N
  5220.  - - - - -|
  5221.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  5222.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  5223.     RW|C C C  N N N     N N N    N N N  N Y N
  5224.  - - - - -|
  5225.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  5226.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  5227.     RW|C C C  N N N     N N N    N N N  Y Y Y
  5228. Legend: Y = open succeeds, N = open fails with error code 05h
  5229.     C = open fails, INT 24 generated
  5230.     1 = open succeeds if file read-only, else fails with error code
  5231.     2 = open succeeds if file read-only, else fails with INT 24
  5232. --------v-213DFF-----------------------------
  5233. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  5234.     AX = 3DFFh
  5235. Return: AX = 4A44h if resident
  5236. SeeAlso: AX=357Fh,AX=4203h
  5237. --------D-213E-------------------------------
  5238. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  5239.     AH = 3Eh
  5240.     BX = file handle
  5241. Return: CF clear if successful
  5242.         AX destroyed
  5243.     CF set on error
  5244.         AX = error code (06h) (see AH=59h)
  5245. Note:    if the file was written to, any pending disk writes are performed, the
  5246.       time and date stamps are set to the current time, and the directory
  5247.       entry is updated
  5248. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  5249. --------D-213F-------------------------------
  5250. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  5251.     AH = 3Fh
  5252.     BX = file handle
  5253.     CX = number of bytes to read
  5254.     DS:DX -> buffer for data
  5255. Return: CF clear if successful
  5256.         AX = number of bytes actually read (0 if at EOF before call)
  5257.     CF set on error
  5258.         AX = error code (05h,06h) (see AH=59h)
  5259. Notes:    data is read beginning at current file position, and the file position
  5260.       is updated after a successful read
  5261.     the returned AX may be smaller than the request in CX if a partial
  5262.       read occurred
  5263.     if reading from CON, read stops at first CR
  5264.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5265. BUG:    Novell NETX.EXE v3.26 and 3.31 do not set CF if the read fails due to
  5266.       a record lock (see AH=5Ch), though it does return AX=0005h; this
  5267.       has been documented by Novell
  5268. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  5269. --------G-213F-------------------------------
  5270. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  5271.     AH = 3Fh
  5272.     BX = handle for character device "TDHDEBUG"
  5273.     CX = number of bytes to read
  5274.     DS:DX -> buffer for status block (see below)
  5275. Return: CF clear if successful
  5276.         AX = number of bytes actually read
  5277.     CF set on error
  5278.         AX = error code (05h,06h) (see AH=59h)
  5279. SeeAlso: AH=40h"Turbo Debug"
  5280.  
  5281. Values for status of command:
  5282.  00h    successful
  5283.  01h    invalid handle
  5284.  02h    no more breakpoints available
  5285.  03h    hardware does not support specified breakpoint type
  5286.  04h    previous command prevents execution
  5287.  05h    debugger hardware not found
  5288.  06h    hardware failure
  5289.  07h    invalid command
  5290.  08h    driver not initialized yet
  5291.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  5292.  
  5293. Format of status block:
  5294. Offset    Size    Description
  5295.  00h    BYTE    status of command (see above)
  5296. ---status for command 01h---
  5297.  01h    WORD    device driver interface version number (currently 1)
  5298.  03h    WORD    device driver software version
  5299.  05h    BYTE    maximum simultaneous hardware breakpoints
  5300.  06h    BYTE    configuration bits (see below)
  5301.  07h    BYTE    supported breakpoint types (see below)
  5302.  08h    WORD    supported addressing match modes (see below)
  5303.  0Ah    WORD    supported data matches (see below)
  5304.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  5305.  0Dh    WORD    size of onboard memory (in KB)
  5306.  0Fh    WORD    maximum number of trace-back events
  5307.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  5308.         supported)
  5309. ---status for command 04h---
  5310.  01h    BYTE    handle to use when referring to the just-set breakpoint
  5311.  
  5312. Bitfields for configuration bits:
  5313. Bit(s)    Description
  5314.  0    CPU and DMA accesses are distinct
  5315.  1    can detect DMA transfers
  5316.  2    supports data mask
  5317.  3    hardware pass counter on breakpoints
  5318.  4    can match on data as well as addresses
  5319.  
  5320. Bitfields for supported breakpoint types:
  5321. Bit(s)    Description
  5322.  0    memory read
  5323.  1    memory write
  5324.  2    memory read/write
  5325.  3    I/O read
  5326.  4    I/O write
  5327.  5    I/O read/write
  5328.  6    instruction fetch
  5329.  
  5330. Bitfields for supported addressing match modes:
  5331. Bit(s)    Description
  5332.  0    any address
  5333.  1    equal to test value
  5334.  2    not equal
  5335.  3    above test value
  5336.  4    below test value
  5337.  5    below or equal
  5338.  6    above or equal
  5339.  7    within range
  5340.  8    outside range
  5341.  
  5342. Bitfields for supported data matches:
  5343. Bit(s)    Description
  5344.  0    any data
  5345.  1    equal to test value
  5346.  2    not equal
  5347.  3    above test value
  5348.  4    below test value
  5349.  5    below or equal
  5350.  6    above or equal
  5351.  7    within range
  5352.  8    outside range
  5353. --------N-213F-------------------------------
  5354. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  5355.     AH = 3Fh
  5356.     BX = handle for character device "$IPCUST"
  5357.     CX = number of bytes to read
  5358.     DS:DX -> buffer for configuration data (see below)
  5359. Return: CF clear if successful
  5360.         AX = number of bytes actually read
  5361.     CF set on error
  5362.         AX = error code (05h,06h) (see AH=59h)
  5363. Notes:    if less than the entire data is read or written, the next read/write
  5364.       continues where the previous one ended; IOCTL calls AX=4402h and
  5365.       AX=4403h both reset the location at which the next operation starts
  5366.       to zero
  5367.     the data pointer is also reset to zero if the previous read or write
  5368.       reached or exceeded the end of the data, when the current function
  5369.       is read and the previous was write, or vice versa
  5370.     v2.1+ uses a new configuration method, but allows the installation
  5371.       of IPCUST.SYS for backward compatibility with other software which
  5372.       must read the PC/TCP configuration
  5373. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  5374.  
  5375. Format of configuration data:
  5376. Offset    Size    Description
  5377.  00h 12 BYTEs    IPCUST.SYS device driver header
  5378.  12h    BYTE    ???
  5379.  13h    BYTE    ???
  5380.  14h    WORD    ???
  5381.  16h    BYTE    bit flags
  5382.         bit 0: send BS rather than DEL for BackSpace key
  5383.         bit 1: wrap long lines
  5384.  17h    BYTE    ???
  5385.  18h 64 BYTEs    ASCIZ hostname
  5386.  58h 64 BYTEs    ASCIZ domain name
  5387.         (fully qualified domain name is hostname.domain-name)
  5388.  98h 16 BYTEs    ASCIZ username
  5389.  A8h 64 BYTEs    ASCIZ full name
  5390.  E8h 64 BYTEs    ASCIZ office address
  5391. 128h 32 BYTEs    ASCIZ phone number
  5392. 148h    WORD    offset from GMT in minutes
  5393. 14Ah  4 BYTEs    ASCIZ timezone name
  5394. 14Eh    WORD    number of time servers
  5395. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  5396.     ???
  5397. 164h    WORD    number of old-style name servers
  5398. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  5399. 172h    WORD    number of domain name servers
  5400. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  5401. 180h    DWORD    (big-endian) IP address of default gateway
  5402. 184h    DWORD    (big-endian) IP address of log server
  5403. 188h    DWORD    (big-endian) IP address of cookie server
  5404. 18Ch    DWORD    (big-endian) IP address of lpr server
  5405. 190h    DWORD    (big-endian) IP address of imagen print server
  5406. 194h 54 BYTEs    ???
  5407. 1E8h    WORD    TCP default window size in bytes
  5408. 1EAh    WORD    TCP low window size
  5409. 1ECh 64 BYTEs    ASCIZ host tabel filename
  5410. 22Ch  2 BYTEs    ???
  5411. 22Eh 80 BYTEs    ASCIZ mail relay host name
  5412. 27Eh    BYTE    ???
  5413. 27Fh    BYTE    ??? bit flags
  5414. 280h 44 BYTEs    ???
  5415. 2ACh    WORD    ???
  5416. 2AEh 202 BYTEs    ???
  5417. --------N-213F-------------------------------
  5418. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  5419.     AH = 3Fh
  5420.     BX = file handle for device "NET$HLP$"
  5421.     CX = 0008h
  5422.     DS:DX -> buffer for entry point record (see AX=4402h"WORKGRP.SYS")
  5423. Return: CF clear if successful
  5424.         AX = number of bytes actually read (0 if at EOF before call)
  5425.     CF set on error
  5426.         AX = error code (05h,06h) (see AH=59h)
  5427. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  5428.       permits communication with PCs running Windows for Workgroups or
  5429.       LAN Manager
  5430. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  5431. --------N-213F-------------------------------
  5432. INT 21 - BW-TCP - GET DRIVER INFO
  5433.     AH = 3Fh
  5434.     BX = file handle for device "ETHDEV27"
  5435.     CX = 002Bh
  5436.     DS:DX -> buffer for driver info (see below)
  5437. Return: CF clear if successful
  5438.         AX = number of bytes actually read (0 if at EOF before call)
  5439.     CF set on error
  5440.         AX = error code (05h,06h) (see AH=59h)
  5441. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  5442. Notes:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  5443.       making this call to retrieve the driver information; one should also
  5444.       call the private API interrupt with AH=15h
  5445.     the installation check for the TCP/IP stack is to test for the
  5446.       existence of the character device UDP-IP10
  5447. SeeAlso: INT 14/AH=56h,INT 62/AH=00h"ETHDEV",INT 63/AH=03h,INT 64/AH=00h
  5448. Index:    installation check;BW-TCP hardware driver
  5449. Index:    installation check;BW-TCP TCPIP.SYS
  5450.  
  5451. Format of driver info:
  5452. Offset    Size    Description
  5453.  00h    WORD    I/O base address
  5454.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  5455.  03h    BYTE    interrupt vector for private API
  5456.  04h    BYTE    IRQ used by board
  5457.  05h    WORD    size of data buffer
  5458.  07h    WORD    maximum transfer window
  5459.  09h    WORD    time zone
  5460.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  5461.  0Ch    DWORD    internet address
  5462.  10h    WORD    "value" ???
  5463.  12h    BYTE    subnet mask
  5464.  13h    WORD    "ether_pointer" ???
  5465.  15h    WORD    offset in device driver of log server records
  5466.  17h    WORD    offset in device driver of name server records
  5467.  19h    WORD    offset in device driver of print server records
  5468.  1Bh    WORD    offset in device driver of time server records
  5469.  1Dh    WORD    offset in device driver of gateway records
  5470.  1Fh    WORD    segment address of device driver
  5471.  21h    BYTE    transfer size
  5472.  22h  9 BYTEs    network adapter board name
  5473. ---11/21/91+ ---
  5474.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  5475.  24h    BYTE    ETHDEV revision
  5476.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  5477.  26h    BYTE    TCPIP revision
  5478.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  5479.  28h    BYTE    BWRPC revision
  5480.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  5481.  2Ah    BYTE    BWNFS revision
  5482.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  5483.  2Ch    BYTE    Telnet revision
  5484.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  5485.  2Eh    BYTE    NETBIOS revision
  5486. Note:    for each driver, if version=0, the driver is not installed or does
  5487.       not support the version check
  5488.  
  5489. Format of server records:
  5490. Offset    Size    Description
  5491.  00h    BYTE    number of server records following
  5492.  01h  N DWORDs    internet addresses of servers
  5493. --------y-213F-------------------------------
  5494. INT 21 - Trusted Access - NB.SYS - GET STATE
  5495.     AH = 3Fh
  5496.     BX = file handle for device "$$NB$$NB"
  5497.     CX = 0002h (size of state)
  5498.     DS:DX -> buffer for state record
  5499. Return: CF clear if successful
  5500.         AX = number of bytes actually read (0 if at EOF before call)
  5501.     CF set on error
  5502.         AX = error code (05h,06h) (see AH=59h)
  5503. Program: Trusted Access is a security and access-control package by Lassen
  5504.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  5505.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  5506. SeeAlso: AH=40h"NB.SYS",AX=4101h
  5507.  
  5508. Format of state record:
  5509. Offset    Size    Description
  5510.  00h    BYTE    00h off, 01h on
  5511.  01h    BYTE    keys being disabled
  5512.         bit 0: Ctrl-Break
  5513.         bit 1: SysRq
  5514.         bit 2: Ctrl and Alt
  5515.         bit 3: Ctrl-Alt-Del
  5516.         bit 7: all keys (overrides other bits)
  5517. --------D-2140-------------------------------
  5518. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  5519.     AH = 40h
  5520.     BX = file handle
  5521.     CX = number of bytes to write
  5522.     DS:DX -> data to write
  5523. Return: CF clear if successful
  5524.         AX = number of bytes actually written
  5525.     CF set on error
  5526.         AX = error code (05h,06h) (see AH=59h)
  5527. Notes:    if CX is zero, no data is written, and the file is truncated or
  5528.       extended to the current position
  5529.     data is written beginning at the current file position, and the file
  5530.       position is updated after a successful write
  5531.     the usual cause for AX < CX on return is a full disk
  5532. BUG:    a write of zero bytes will appear to succeed when it actually failed
  5533.       if the write is extending the file and there is not enough disk
  5534.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  5535.       whether the file was in fact extended by seeking to 0 bytes from
  5536.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  5537.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5538. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  5539. --------G-2140-------------------------------
  5540. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  5541.     AH = 40h
  5542.     BX = handle for character device "TDHDEBUG"
  5543.     CX = number of bytes to write
  5544.     DS:DX -> hardware breakpoint command (see below)
  5545. Return: CF clear if successful
  5546.         AX = number of bytes actually written
  5547.     CF set on error
  5548.         AX = error code (05h,06h) (see AH=59h)
  5549. Note:    results are retrieved by reading from the device
  5550. SeeAlso: AH=3Fh"Turbo Debug"
  5551.  
  5552. Format of hardware breakpoint commands:
  5553. Offset    Size    Description
  5554.  00h    BYTE    command code
  5555.         00h install interrupt vectors
  5556.         01h get hardware capabilities
  5557.         02h enable hardware breakpoints
  5558.         03h disable hardware breakpoints
  5559.         04h set hardware breakpoint
  5560.         05h clear hardware breakpoint
  5561.         06h set I/O base address and reset hardware
  5562.         07h restore interrupt vectors
  5563. ---command code 00h---
  5564.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  5565.         hardware breakpoint; call with CPU state the same as on
  5566.         the breakpoint except for pushing AX and placing an entry
  5567.         code (FFh if breakout button or breakpoint handle) in AH
  5568. ---command code 04h---
  5569.  01h    BYTE    breakpoint type
  5570.         00h memory read
  5571.         01h memory write
  5572.         02h memory read/write
  5573.         03h I/O read
  5574.         04h I/O write
  5575.         05h I/O read/write
  5576.         06h instruction fetch
  5577.  02h    BYTE    address matching mode
  5578.         00h any address
  5579.         01h equal to test value
  5580.         02h different from test value
  5581.         03h above test value
  5582.         04h below test value
  5583.         05h below or equal to test value
  5584.         06h above or equal to test value
  5585.         07h within inclusive range
  5586.         08h outside specified range
  5587.  03h    DWORD    32-bit linear low address
  5588.  07h    DWORD    32-bit linear high address
  5589.  0Bh    WORD    pass count
  5590.  0Dh    BYTE    data size (01h, 02h, or 04h)
  5591.  0Eh    BYTE    source of matched bus cycle
  5592.         01h CPU
  5593.         02h DMA
  5594.         03h either
  5595.  0Fh    BYTE    data-matching mode
  5596.         00h match any
  5597.         01h equal to test value
  5598.         02h different from test value
  5599.         03h above test value
  5600.         04h below test value
  5601.         05h below or equal to test value
  5602.         06h above or equal to test value
  5603.         07h within specified range
  5604.         08h outside specified range
  5605.  10h    DWORD    low data value
  5606.  14h    DWORD    high data value
  5607.  18h    DWORD    data mask specifying which bits of the data are tested
  5608. ---command code 05h---
  5609.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  5610.         04h)
  5611. ---command code 06h---
  5612.  01h    WORD    base address of hardware debugger board
  5613. --------N-2140-------------------------------
  5614. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  5615.     AH = 40h
  5616.     BX = handle for character device "$IPCUST"
  5617.     CX = number of bytes to write
  5618.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  5619. Return: CF clear if successful
  5620.         AX = number of bytes actually written
  5621.     CF set on error
  5622.         AX = error code (05h,06h) (see AH=59h)
  5623. Notes:    if less than the entire data is read or written, the next read/write
  5624.       continues where the previous one ended; IOCTL calls AX=4402h and
  5625.       AX=4403h both reset the location at which the next operation starts
  5626.       to zero
  5627.     the data pointer is also reset to zero if the previous read or write
  5628.       reached or exceeded the end of the data, when the current function
  5629.       is read and the previous was write, or vice versa
  5630.     v2.1+ uses a new configuration method, but allows the installation
  5631.       of IPCUST.SYS for backward compatibility with other software which
  5632.       must read the PC/TCP configuration
  5633. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  5634. --------y-2140-------------------------------
  5635. INT 21 U - Trusted Access - NB.SYS - SET STATE
  5636.     AH = 40h
  5637.     BX = handle for character device "$$NB$$NB"
  5638.     DS:DX -> state record (see AH=3Fh"NB.SYS")
  5639.     CX ignored
  5640. Return: CF clear if successful
  5641.         AX = number of bytes actually written
  5642.     CF set on error
  5643.         AX = error code (05h,06h) (see AH=59h)
  5644. Program: Trusted Access is a security and access-control package by Lassen
  5645.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  5646.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  5647. SeeAlso: AH=3Fh"NB.SYS"
  5648. --------j-214000BX0002-----------------------
  5649. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  5650.     AX = 4000h
  5651.     BX = 0002h
  5652.     CX = 0000h
  5653.     DS:DX = 0000h:0000h
  5654. Return: CF clear if installed
  5655.         AX = CS of resident code
  5656. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  5657.       noises when programs output a bell
  5658. SeeAlso: AX=4001h
  5659. --------j-214001BX0002-----------------------
  5660. INT 21 - FARTBELL.EXE - FORCE NOISE
  5661.     AX = 4001h
  5662.     BX = 0002h
  5663.     CX = 0000h
  5664.     DS:DX = 0000h:0000h
  5665. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  5666.       noises when programs output a bell
  5667. SeeAlso: AX=4000h
  5668. --------D-2141-------------------------------
  5669. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  5670.     AH = 41h
  5671.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  5672.     CL = attribute mask for deletion (server call only, see below)
  5673. Return: CF clear if successful
  5674.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  5675.     CF set on error
  5676.         AX = error code (02h,03h,05h) (see AH=59h)
  5677. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  5678.       the filespec must be canonical (as returned by AH=60h), and only
  5679.       files matching the attribute mask in CL are deleted
  5680.     DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h
  5681.     DOS does not erase the file's data; it merely becomes inaccessible
  5682.       because the FAT chain for the file is cleared
  5683.     deleting a file which is currently open may lead to filesystem
  5684.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  5685.       referencing the deleted file, thus allowing writes to a nonexistant
  5686.       file.
  5687.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  5688.       is currently open
  5689.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5690. BUG:    DR-DOS 3.41 crashes if called via AX=5D00h
  5691. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AH=71h,AX=F244h
  5692. SeeAlso: INT 2F/AX=1113h
  5693. --------y-214101DXFFFE-----------------------
  5694. INT 21 - SoftLogic Data Guardian - ???
  5695.     AX = 4101h
  5696.     DX = FFFEh
  5697. Return: AX = 0000h if installed
  5698. Note:    resident code sets several internal variables on this call
  5699. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  5700. --------D-2142-------------------------------
  5701. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  5702.     AH = 42h
  5703.     AL = origin of move
  5704.         00h start of file
  5705.         01h current file position
  5706.         02h end of file
  5707.     BX = file handle
  5708.     CX:DX = offset from origin of new file position
  5709. Return: CF clear if successful
  5710.         DX:AX = new file position in bytes from start of file
  5711.     CF set on error
  5712.         AX = error code (01h,06h) (see AH=59h)
  5713. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  5714.       start of the file; no error is returned in that case, but subsequent
  5715.       attempts at I/O will produce errors
  5716.     if the new position is beyond the current end of file, the file will
  5717.       be extended by the next write (see AH=40h)
  5718. BUG:    using this method to grow a file from zero bytes to a very large size
  5719.       can corrupt the FAT in some versions of DOS; the file should first
  5720.       be grown from zero to one byte and then to the desired large size
  5721. SeeAlso: AH=24h,INT 2F/AX=1228h
  5722. --------v-214203-----------------------------
  5723. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  5724.     AX = 4203h
  5725. Return: AX = 1234h if resident
  5726. SeeAlso: AX=3DFFh,AX=4243h
  5727. --------v-214243-----------------------------
  5728. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  5729.     AX = 4243h
  5730. Return: AX = 5678h if resident
  5731. SeeAlso: AX=4203h,AX=4B04h
  5732. --------D-214300-----------------------------
  5733. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  5734.     AX = 4300h
  5735.     DS:DX -> ASCIZ filename
  5736. Return: CF clear if successful
  5737.         CX = file attributes (see AX=4301h)
  5738.         AX = CX (DR-DOS 5.0)
  5739.     CF set on error
  5740.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  5741. Notes:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  5742.     under DR-DOS 3.41 and 5.0, attempts to change the subdirectory bit are
  5743.       simply ignored without an error
  5744. SeeAlso: AX=4301h,AX=4310h,AH=71h,AH=B6h,INT 2F/AX=110Fh
  5745. --------D-214301-----------------------------
  5746. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  5747.     AX = 4301h
  5748.     CX = new file attributes (see below)
  5749.     DS:DX -> ASCIZ filename
  5750. Return: CF clear if successful
  5751.         AX destroyed
  5752.     CF set on error
  5753.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  5754. Notes:    will not change volume label or directory attribute bits, but will
  5755.       change the other attribute bits of a directory (the directory
  5756.       bit must be cleared to successfully change the other attributes of a
  5757.       directory, but the directory will not be changed to a normal file as
  5758.       a result)
  5759.     MS-DOS 4.01 reportedly closes the file if it is currently open
  5760.     for security reasons, the Novell NetWare execute-only bit can never
  5761.       be cleared; the file must be deleted and recreated
  5762.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  5763.     DOS 5.0 SHARE will close the file if it is currently open in sharing-
  5764.       compatibility mode, otherwise a sharing violation critical error is
  5765.       generated if the file is currently open
  5766. SeeAlso: AX=4300h,AX=4311h,AH=71h,INT 2F/AX=110Eh
  5767.  
  5768. Bitfields for file attributes:
  5769. Bit(s)    Description
  5770.  7    shareable (Novell NetWare)
  5771.  6    unused
  5772.  5    archive
  5773.  4    directory
  5774.  3    volume label
  5775.     execute-only (Novell NetWare)
  5776.  2    system
  5777.  1    hidden
  5778.  0    read-only
  5779. --------D-214302-----------------------------
  5780. INT 21 - DOS 7 (Chicago) - GET VOLUME INFORMATION
  5781.     AX = 4302h
  5782.     details not yet available
  5783. SeeAlso: AH=71h,AH=72h
  5784. --------O-214302-----------------------------
  5785. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  5786.     AX = 4302h
  5787.     DS:DX -> ASCIZ pathname
  5788. Return: CF clear if successful
  5789.         CX = access rights (see below)
  5790.         AX = CX (DR-DOS 5.0)
  5791.     CF set on error
  5792.         AX = error code
  5793. Desc:    Determine which operations the calling program may perform on a
  5794.       specified file without being required to provide a password.
  5795. Notes:    this protection scheme has been coordinated on all current Digital
  5796.       Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
  5797.       FlexOS 2+)
  5798.     this function is documented in DR-DOS 6.0 and corresponds to the
  5799.       "Get/Set File Attributes" function, subfunction 2, documented in
  5800.       Concurrent DOS.
  5801.     only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
  5802.       them as "read" bits.
  5803.     DR-DOS 3.41-5.x only use bits 0-3.  Only DR-DOS 6.0 using a
  5804.       DRMDOS 5.x security system allowing for users and groups uses bits
  5805.       4-11.
  5806. SeeAlso: AX=4303h
  5807.  
  5808. Bitfields for access rights:
  5809. Bit(s)    Description
  5810.  0    owner delete requires password
  5811.  1    owner execution requires password (FlexOS)
  5812.  2    owner write requires password
  5813.  3    owner read requires password
  5814.  4    group delete requires password
  5815.  5    group execution requires password (FlexOS)
  5816.  6    group write requires password
  5817.  7    group read requires password
  5818.  8    world delete requires password
  5819.  9    world execution requires password (FlexOS)
  5820.  10    world write requires password
  5821.  11    world read requires password
  5822. --------O-214303-----------------------------
  5823. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  5824.     AX = 4303h
  5825.     CX = access rights
  5826.          bits 11-0: access rights (see AX=4302h"DR-DOS")
  5827.          bit 15: new password is to be set
  5828.     DS:DX -> ASCIZ pathname
  5829.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  5830. Return: CF clear if successful
  5831.     CF set on error
  5832.         AX = error code
  5833. Notes:    if the file is already protected, the old password must be added after
  5834.       the pathname, separated by a ";"
  5835.     this function is documented in DR-DOS 6.0 and corresponds to the
  5836.       "Get/Set File Attributes" function, subfunction 3, documented in
  5837.       Concurrent DOS.
  5838. SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR-DOS",AX=4305h,AX=4454h
  5839. --------O-214304-----------------------------
  5840. INT 21 U - DR-DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
  5841.     AX = 4304h
  5842.     DS:DX -> ASCIZ filename
  5843.     ???
  5844. Return: CF clear if successful
  5845.         CX = AX = 0000h if no password assigned to file
  5846.     CF set on error
  5847.         AX = error code (see AH=59h)
  5848. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  5849. SeeAlso: AX=4303h,AX=4305h
  5850. --------O-214305-----------------------------
  5851. INT 21 U - DR-DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES
  5852.     AX = 4305h
  5853.     DS:DX -> ASCIZ filename
  5854.     ???
  5855. Return: CF clear if successful
  5856.     CF set on error
  5857.         AX = error code (see AH=59h)
  5858. Desc:    this function allows the extended attributes, and optionally the
  5859.       encrypted password, of a file to be set.
  5860. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  5861. SeeAlso: AX=4304h,AX=4311h
  5862. --------O-214306-----------------------------
  5863. INT 21 - DR-DOS 6.0 - GET FILE OWNER
  5864.     AX = 4306h
  5865.     DS:DX -> ASCIZ filename
  5866. Return: CF clear if successful
  5867.         AX = CX = value set with AX=4307h
  5868.     CF set on error
  5869.         AX = error code (see AH=59h)
  5870. SeeAlso: AX=4307h
  5871. --------O-214307-----------------------------
  5872. INT 21 - DR-DOS 6.0 - SET FILE OWNER
  5873.     AX = 4307h
  5874.     CX = ??? (owner identification number?)
  5875.     DS:DX -> ASCIZ filename
  5876. Return: CF clear if successful
  5877.     CF set on error
  5878.         AX = error code (see AH=59h)
  5879. SeeAlso: AX=4306h
  5880. --------N-214310-----------------------------
  5881. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  5882.     AX = 4310h
  5883.     DS:DX -> ASCIZ filename
  5884. Return: CF clear if successful
  5885.         CH = attributes (see AX=4311h)
  5886.     CF set on error
  5887.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  5888. Note:    the filename may be a directory but must be on a VINES file service
  5889. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  5890. --------N-214311-----------------------------
  5891. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  5892.     AX = 4311h
  5893.     CH = new attributes (see below)
  5894.     DS:DX -> ASCIZ filename
  5895. Return: CF clear if successful
  5896.     CF set on error
  5897.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  5898. Note:    the filename may be a directory but must be on a VINES file service
  5899. SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh
  5900.  
  5901. Bitfields for extended file attributes:
  5902. Bit(s)    Description
  5903.  7    unused
  5904.  6    shareable
  5905.  5    execute-only
  5906.  4-0    unused
  5907. --------O-214380-----------------------------
  5908. INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE
  5909.     AX = 4380h
  5910.     ???
  5911. Return: ???
  5912. SeeAlso: AH=41h,AX=4381h
  5913. --------O-214381-----------------------------
  5914. INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE
  5915.     AX = 4381h
  5916.     ???
  5917. Return: ???
  5918. SeeAlso: AH=41h,AX=4380h
  5919. --------D-214400-----------------------------
  5920. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  5921.     AX = 4400h
  5922.     BX = handle
  5923. Return: CF clear if successful
  5924.         DX = device information word (see below)
  5925.         AX destroyed
  5926.     CF set on error
  5927.         AX = error code (01h,05h,06h) (see AH=59h)
  5928. Notes:    value in DH corresponds to high byte of device driver's attribute word
  5929.       if handle refers to a character device
  5930.     Novell NetWare reportedly does not return a drive number in bits 5-0
  5931.       for a disk file
  5932. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  5933.  
  5934. Bitfields for device information word:
  5935. Bit(s)    Description
  5936.  character device
  5937.   14    device driver can process IOCTL requests (see AX=4402h)
  5938.   13    output until busy supported
  5939.   11    driver supports OPEN/CLOSE calls
  5940.    7    set (indicates device)
  5941.    6    EOF on input
  5942.    5    raw (binary) mode
  5943.    4    device is special (uses INT 29)
  5944.    3    clock device
  5945.    2    NUL device
  5946.    1    standard output
  5947.    0    standard input
  5948.  disk file
  5949.   15    file is remote (DOS 3+)
  5950.   14    don't set file date/time on closing (DOS 3+)
  5951.   11    media not removable
  5952.    8    (DOS 4 only) generate INT 24 if no disk space on write or read past
  5953.       end of file
  5954.    7    clear (indicates file)
  5955.    6    file has not been written
  5956.   5-0    drive number (0 = A:)
  5957. --------D-214401-----------------------------
  5958. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  5959.     AX = 4401h
  5960.     BX = handle (must refer to character device)
  5961.     DX = device information word (see AX=4400h)
  5962.         (DH must be zero)
  5963. Return: CF clear if successful
  5964.     CF set on error
  5965.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  5966. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  5967. --------D-214402-----------------------------
  5968. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  5969.     AX = 4402h
  5970.     BX = file handle referencing character device
  5971.     CX = number of bytes to read
  5972.     DS:DX -> buffer
  5973. Return: CF clear if successful
  5974.         AX = number of bytes actually read
  5975.     CF set on error
  5976.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  5977. Note:    format of data is driver-specific (see below for some specific cases)
  5978. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  5979. --------N-214402-----------------------------
  5980. INT 21 - Network Driver Interface Specification (NDIS) 2.0.1 - PROTOCOL MANAGER
  5981.     AX = 4402h
  5982.     BX = file handle for device "PROTMAN$"
  5983.     CX = 000Eh (size of request block)
  5984.     DS:DX -> request block (see below)
  5985. Return: CF clear if successful
  5986.         AX = number of bytes actually read
  5987.     CF set on error
  5988.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  5989. SeeAlso: AX=4402h"FTPSOFT"
  5990.  
  5991. Format of request block for GetProtocolManagerInfo:
  5992. Offset    Size    Description
  5993.  00h    WORD    01h
  5994.  02h    WORD    returned status (see below)
  5995.  04h    DWORD    returned pointer to structure representing parsed user config
  5996.  08h    DWORD    unused
  5997.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  5998.  
  5999. Format of request block for RegisterModule:
  6000. Offset    Size    Description
  6001.  00h    WORD    02h
  6002.  02h    WORD    returned status (see below)
  6003.  04h    DWORD    pointer to module's common characteristics table (see below)
  6004.  08h    DWORD    pointer to list of modules to which the module is to be bound
  6005.  0Ch    WORD    unused
  6006.  
  6007. Format of request block for BindAndStart:
  6008. Offset    Size    Description
  6009.  00h    WORD    03h
  6010.  02h    WORD    returned status (see below)
  6011.  04h    DWORD    caller's virtual address in FailingModules structure
  6012.  08h    DWORD    unused
  6013.  0Ch    WORD    unused
  6014.  
  6015. Format of request block for GetProtocolManagerLinkage:
  6016. Offset    Size    Description
  6017.  00h    WORD    04h
  6018.  02h    WORD    returned status (see below)
  6019.  04h    DWORD    returned dispatch point
  6020.  08h    DWORD    unused
  6021.  0Ch    WORD    returned protocol manager DS
  6022. Note:    the dispatch point may be called as follows instead of using this IOCTL
  6023.     STACK: WORD  protocol manager DS
  6024.            DWORD pointer to request block
  6025.     Return: AX = returned status
  6026.         STACK popped
  6027.  
  6028. Format of request block for GetProtocolIniPath:
  6029. Offset    Size    Description
  6030.  00h    WORD    05h
  6031.  02h    WORD    returned status (see below)
  6032.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  6033.  08h    DWORD    unused
  6034.  0Ch    WORD    buffer length
  6035.  
  6036. Format of request block for RegisterProtocolManagerInfo:
  6037. Offset    Size    Description
  6038.  00h    WORD    06h
  6039.  02h    WORD    returned status (see below)
  6040.  04h    DWORD    pointer to structure containing parsed user config file
  6041.  08h    DWORD    unused
  6042.  0Ch    WORD    length of structure
  6043.  
  6044. Format of request block for InitAndRegister:
  6045. Offset    Size    Description
  6046.  00h    WORD    07h
  6047.  02h    WORD    returned status (see below)
  6048.  04h    DWORD    unused
  6049.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  6050.  0Ch    WORD    unused
  6051.  
  6052. Format of request block for UnbindAndStop:
  6053. Offset    Size    Description
  6054.  00h    WORD    08h
  6055.  02h    WORD    returned status (see below)
  6056.  04h    DWORD    failing modules as for BindAndStart
  6057.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  6058.         if 0000h:0000h, terminate a set of previously dynamically
  6059.           bound protocol modules
  6060.  0Ch    WORD    unused
  6061.  
  6062. Format of request block for BindStatus:
  6063. Offset    Size    Description
  6064.  00h    WORD    09h
  6065.  02h    WORD    returned status (see below)
  6066.  04h    DWORD    must be 0000h:0000h
  6067.         on return, points to root tree
  6068.  08h    DWORD    0000h:0000h
  6069.  0Ch    WORD    unused under DOS
  6070.  
  6071. Format of request block for RegisterStatus:
  6072. Offset    Size    Description
  6073.  00h    WORD    0Ah
  6074.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  6075.  04h    DWORD    0000h:0000h
  6076.  08h    DWORD    pointer to 16-byte ASCIZ module name
  6077.  0Ch    WORD    0000h
  6078. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  6079.  
  6080. Values for status code:
  6081.  0000h    success
  6082.  0001h    wait for release--protocol has retained control of the data buffer
  6083.  0002h    request queued
  6084.  0003h    frame not recognized
  6085.  0004h    frame rejected
  6086.  0005h    frame should be forwarded
  6087.  0006h    out of resource
  6088.  0007h    invalid parameter
  6089.  0008h    invalid function
  6090.  0009h    not supported
  6091.  000Ah    hardware error
  6092.  000Bh    transmit error
  6093.  000Ch    unrecognized destination
  6094.  000Dh    buffer too small
  6095.  0020h    already started
  6096.  0021h    binding incomplete
  6097.  0022h    driver not initialized
  6098.  0023h    hardware not found
  6099.  0024h    hardware failure
  6100.  0025h    configuration failure
  6101.  0026h    interrupt conflict
  6102.  0027h    MAC incompatible
  6103.  0028h    initialization failed
  6104.  0029h    no binding
  6105.  002Ah    network may be disconnected
  6106.  002Bh    incompatible OS version
  6107.  002Ch    already registered
  6108.  002Dh    path not found
  6109.  002Eh    insufficient memory
  6110.  002Fh    info not found
  6111.  00FFh    general failure
  6112.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  6113.  
  6114. Format of common characteristics table:
  6115. Offset    Size    Description
  6116.  00h    WORD    size of table in bytes
  6117.  02h    BYTE    NDIS major version
  6118.  03h    BYTE    NDIS minor version
  6119.  04h    WORD    reserved
  6120.  06h    BYTE    module major version
  6121.  07h    BYTE    module minor version
  6122.  08h    DWORD    module function flag bits
  6123.         bit 0: binding at upper boundary supported
  6124.         bit 1: binding at lower boundary supported
  6125.         bit 2: dynamically bound
  6126.         bits 3-31 reserved, must be 0
  6127.  0Ch 16 BYTEs    ASCIZ module name
  6128.  1Ch    BYTE    upper boundary protocol level (see below)
  6129.  1Dh    BYTE    upper boundary interface type
  6130.         for MACs: 1 = MAC
  6131.         for data links and transports: to be defined
  6132.         for session: 1 = NCB
  6133.         any level: 0 = private (ISV-defined)
  6134.  1Eh    BYTE    lower boundary protocol level (see below)
  6135.  1Fh    BYTE    lower boundary interface type
  6136.         same as offset 1Dh
  6137.  20h    WORD    module ID filled in by protocol manager
  6138.  22h    WORD    module DS
  6139.  24h    DWORD    system request entry point
  6140.  28h    DWORD    pointer to service-specific characteristics
  6141.         0000h:0000h if none
  6142.  2Ch    DWORD    pointer to service-specific status, or 0000h:0000h if none
  6143.  30h    DWORD    pointer to upper dispatch table (see below)
  6144.         0000h:0000h if none
  6145.  34h    DWORD    pointer to lower dispatch table (see below)
  6146.         0000h:0000h if none
  6147.  38h  2 DWORDs    reserved, must be 0
  6148. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  6149.       interpreted as 01h
  6150.  
  6151. Values for boundary protocol level:
  6152.  00h    physical
  6153.  01h    Media Access Control
  6154.  02h    Data link
  6155.  03h    network
  6156.  04h    transport
  6157.  05h    session
  6158.  FFh    not specified
  6159.  
  6160. Format of dispatch table:
  6161. Offset    Size    Description
  6162.  00h    DWORD    -> common characteristics table (see above)
  6163.  04h  4 BYTEs    ???
  6164.  08h    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  6165.  0Ch    DWORD    -> ??? function (called with 10 bytes of stack arguments)
  6166.  10h    DWORD    -> ??? function (called with 16 bytes of stack arguments)
  6167.  14h    DWORD    -> ??? function (called with 4 bytes of stack arguments)
  6168.  18h    DWORD    -> ??? function (called with 18 bytes of stack arguments)
  6169.  1Ch    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  6170.  
  6171. Format of MAC Service-Specific Characteristics Table:
  6172. Offset    Size    Description
  6173.  00h    WORD    length of table in bytes
  6174.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  6175.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  6176.         "HDLC", or "ISDN"
  6177.  12h    WORD    length of station addresses in bytes
  6178.  14h 16 BYTEs    permanent station address
  6179.  24h 16 BYTEs    current station address
  6180.  34h    DWORD    current functional adapter address (00000000h if none)
  6181.  38h    DWORD    pointer to multicast address list
  6182.  3Ch    DWORD    link speed in bits/sec
  6183.  40h    DWORD    service flags (see below)
  6184.  44h    WORD    maximum frame size which may be both sent and received
  6185.  46h    DWORD    total transmit buffer capacity in bytes
  6186.  4Ah    WORD    transmit buffer allocation block size in bytes
  6187.  4Ch    DWORD    total receive buffer capacity in bytes
  6188.  50h    WORD    receive buffer allocation block size in bytes
  6189.  52h  3 BYTEs    IEEE vendor code
  6190.  55h    BYTE    vendor adapter code
  6191.  56h    DWORD    pointer to ASCIZ vendor adapter description
  6192.  5Ah    WORD    IRQ used by adapter
  6193.  5Ch    WORD    transmit queue depth
  6194.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  6195.  60h  N BYTEs    vendor-specific info
  6196.  
  6197. Bitfields for service flags:
  6198. Bit(s)    Description
  6199.  0    supports broadcast
  6200.  1    supports multicast
  6201.  2    supports functional/group addressing
  6202.  3    supports promiscuous mode
  6203.  4    station address software settable
  6204.  5    statistics always current
  6205.  6    supports InitiateDiagnostics
  6206.  7    supports loopback
  6207.  8    MAC does primarily ReceiveChain indications instead of ReceiveLookahead
  6208.     indications
  6209.  9    supports IBM source routing
  6210.  10    supports MAC reset
  6211.  11    supports Open/Close adapter
  6212.  12    supports interrupt request
  6213.  13    supports source routing bridge
  6214.  14    supports GDT virtual addresses (OS/2 version)
  6215.  15    multiple TransferDatas allowed durign a single indication
  6216.  16    MAC normally sets FrameSize = 0 in ReceiveLookahead
  6217.  17-31    reserved, must be 0
  6218.  
  6219. Format of NetBIOS Service-Specific Characteristics Table
  6220. Offset    Size    Description
  6221.  00h    WORD    length of table in bytes
  6222.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  6223.  12h    WORD    NetBIOS module code
  6224.  14h  N BYTEs    vendor-specific info
  6225.  
  6226. Format of MAC Service-Specific Status Table:
  6227. Offset    Size    Description
  6228.  00h    WORD    length of table in bytes
  6229.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  6230.         (FFFFFFFFh = never)
  6231.  06h    DWORD    MAC status bits (see below)
  6232.  0Ah    WORD    current packet filter flags (see below)
  6233.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  6234.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  6235.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  6236.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  6237.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  6238.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  6239.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  6240.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  6241.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  6242.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  6243.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  6244.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  6245.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  6246.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  6247.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  6248.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  6249.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  6250.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  6251.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  6252.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  6253.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  6254.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  6255.  64h  N BYTEs    vendor-specific info
  6256.  
  6257. Bitfields for MAC status bits:
  6258. Bit(s)    Description
  6259.  0-2    operational status
  6260.     000 hardware not installed
  6261.     001 hardware failed startup diagnostics
  6262.     010 hardware configuration problem
  6263.     011 hardware fault
  6264.     100 operating marginally due to soft faults
  6265.     101 reserved
  6266.     110 reserved
  6267.     111 hardware fully operational
  6268.  3    MAC bound
  6269.  4    MAC open
  6270.  5    diagnostics in progress
  6271.  6-31    reserved
  6272.  
  6273. Bitfields for packet filter flags:
  6274. Bit(s)    Description
  6275.  0    directed/multicast or group/functional
  6276.  1    broadcast
  6277.  2    promiscuous
  6278.  3    all source routing
  6279.  4-15    reserved, must be zero
  6280. --------I-214402-----------------------------
  6281. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  6282.     AX = 4402h
  6283.     BX = handle for character device "GDMS"
  6284.     CX = number of bytes to read (>= 4)
  6285.     DS:DX -> buffer (see below)
  6286. Return: CF set on error
  6287.         AX = error code (see AH=59h)
  6288.     CF clear if successful
  6289.         AX = number of bytes read
  6290.  
  6291. Format of returned data:
  6292. Offset    Size    Description
  6293.  00h  4 BYTEs    ???
  6294.  04h    DWORD    pointer to ???
  6295.  08h  4 BYTEs    ???
  6296. --------m-214402-----------------------------
  6297. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  6298.     AX = 4402h
  6299.     BX = handle for device "LA$TBYTE"
  6300.     CX = 0004h
  6301.     DS:DX -> DWORD to hold address of 39-byte table of ???
  6302. Return: CF set on error
  6303.         AX = error code (see AH=59h)
  6304.     CF clear if successful
  6305.         AX = number of bytes read
  6306. Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory
  6307.       management package by Key Software Products
  6308. SeeAlso: AX=4402h"HIGHUMM"
  6309. --------m-214402-----------------------------
  6310. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  6311.     AX = 4402h
  6312.     BX = handle for device "KSP$UMM"
  6313.     CX = 0004h
  6314.     DS:DX -> DWORD to hold entry point
  6315. Return: CF set on error
  6316.         AX = error code (see AH=59h)
  6317.     CF clear if successful
  6318.         AX = number of bytes read
  6319. Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory management
  6320.       package by Key Software Products
  6321. SeeAlso: AX=4402h"LASTBYTE"
  6322.  
  6323. Call HIGHUMM.SYS entry point with:
  6324.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  6325.         DX = size in paragraphs
  6326.         Return: BX = segment number (if successful)
  6327.             DX = size of requested block/size of largest block
  6328.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  6329.         DX = segment number of UMB
  6330.     AH = 02h request a bank-switched memory block
  6331.         DX = size in paragraphs
  6332.         Return: BX = segment number (if successful)
  6333.             DX = size of requested block/size of largest block
  6334.     AH = 03h release a bank-switched memory block
  6335.         DX = segment number
  6336.     AH = 04h transfer data to/from high memory
  6337.         DS:SI -> source
  6338.         ES:DI -> destination
  6339.         CX = length in bytes
  6340.         Note: enables bank-switched memory, does the copy, then disables
  6341.         bank-switched memory
  6342.     AH = 05h get a word from bank-switched memory
  6343.         ES:DI -> word to read
  6344.         Return: DX = word
  6345.     AH = 06h put a word to bank-switched memory
  6346.         ES:DI -> word to write
  6347.         DX = word
  6348.     AH = 07h put a byte to bank-switched memory
  6349.         ES:DI -> byte to write
  6350.         DL = byte
  6351.     AH = 08h enable bank-switched memory
  6352.         DS:SI -> 6-byte status save area
  6353.     AH = 09h disable bank-switched memory
  6354.         DS:SI -> 6-byte save area from enable call (AH=08h)
  6355.     AH = 0Ah assign name to UMB or high bank-switched block
  6356.         DX = segment number
  6357.         DS:SI -> 8-byte blank-padded name
  6358.     AH = 0Bh locate UMB block by name
  6359.         DS:SI -> 8-byte blank-padded name
  6360.         Return: BX = segment number (if successful)
  6361.             DX = size of block
  6362.     AH = 0Ch locate bank-switched block by name
  6363.         DS:SI -> 8-byte blank-padded name
  6364.         Return: BX = segment number (if successful)
  6365.             DX = size of block
  6366. Return: AX = status code
  6367.         0001h successful
  6368.         0000h failed
  6369.         BL = error code
  6370.             80h not implemented
  6371.             B0h insufficient memory, smaller block available
  6372.             B1h insufficient memory, no blocks available
  6373.             B2h invalid segment number
  6374. Note:    only functions 00h and 01h are always available; the remaining
  6375.       functions are only enabled if the proper commandline switch is given
  6376. --------c-214402-----------------------------
  6377. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - GET CACHE STATUS
  6378.     AX = 4402h
  6379.     BX = file handle for device "SMARTAAR"
  6380.     CX = number of bytes to read (min 28h)
  6381.     DS:DX -> buffer for status record (see below)
  6382. Return: CF clear if successful
  6383.         AX = number of bytes actually read
  6384.     CF set on error
  6385.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  6386. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  6387.  
  6388. Format of SMARTDRV status record:
  6389. Offset    Size    Description
  6390.  00h    BYTE    write-through flag (always 01h)
  6391.  01h    BYTE    writes should be buffered (always 00h)
  6392.  02h    BYTE    cache enabled if 01h
  6393.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  6394.  04h    WORD    clock ticks between cache flushes (currently unused)
  6395.  06h    BYTE    cache contains locked tracks if nonzero
  6396.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  6397.  08h    BYTE    cache full track writes if nonzero
  6398.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  6399.  0Ah    DWORD    original INT 13 vector
  6400.  0Eh    BYTE    minor version number
  6401.  0Fh    BYTE    major version number
  6402.  10h    WORD    unused
  6403.  12h    WORD    sectors read            \
  6404.  14h    WORD    sectors already in cache     > may be scaled rather than
  6405.  16h    WORD    sectors already in track buffer /  absolute counts
  6406.  18h    BYTE    cache hit rate in percent
  6407.  19h    BYTE    track buffer hit rate in percent
  6408.  1Ah    WORD    total tracks in cache
  6409.  1Ch    WORD    number of tracks in use
  6410.  1Eh    WORD    number of locked tracks
  6411.  20h    WORD    number of dirty tracks
  6412.  22h    WORD    current cache size in 16K pages
  6413.  24h    WORD    original (maximum) cache size in 16K pages
  6414.  26h    WORD    minimum cache size in 16K pages
  6415.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  6416. --------d-214402-----------------------------
  6417. INT 21 - CD-ROM device driver - IOCTL INPUT
  6418.     AX = 4402h
  6419.     BX = file handle referencing character device for CD-ROM driver
  6420.     CX = number of bytes to read
  6421.     DS:DX -> control block (see below)
  6422. Return: CF clear if successful
  6423.         AX = number of bytes actually read
  6424.     CF set on error
  6425.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  6426. Note:    the data returned depends on the first byte of the control block; the
  6427.       remainder of the control block is filled by the driver
  6428. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  6429.  
  6430. Values for data being requested:
  6431.  00h    device driver header address
  6432.  01h    drive head location
  6433.  02h    reserved
  6434.  03h    error statistics
  6435.  04h    audio channel info
  6436.  05h    raw drive bytes (uninterpreted and device-specific)
  6437.  06h    device status
  6438.  07h    sector size
  6439.  08h    volume size
  6440.  09h    media change status
  6441.  0Ah    audio disk info
  6442.  0Bh    audio track info
  6443.  0Ch    audio Q-Channel info
  6444.  0Dh    audio sub-channel info
  6445.  0Eh    UPC code
  6446.  
  6447. Format of control block:
  6448. Offset    Size    Description
  6449.  00h    BYTE    data being requested (see above)
  6450. ---function 00h---
  6451.  01h    DWORD    device driver header address (see also AH=52h)
  6452. ---function 01h---
  6453.  01h    BYTE    addressing mode
  6454.         00h HSG
  6455.         01h Red Book
  6456.  02h    DWORD    current location of drive's head
  6457.         logical sector number in HSG mode
  6458.         frame/second/minute/unused in Red Book mode
  6459.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  6460. ---function 03h---
  6461.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  6462. ---function 04h---
  6463.  01h    BYTE    input channel (0-3) for output channel 0
  6464.  02h    BYTE    volume for output channel 0
  6465.  03h    BYTE    input channel (0-3) for output channel 1
  6466.  04h    BYTE    volume for output channel 1
  6467.  05h    BYTE    input channel (0-3) for output channel 2
  6468.  06h    BYTE    volume for output channel 2
  6469.  07h    BYTE    input channel (0-3) for output channel 3
  6470.  08h    BYTE    volume for output channel 3
  6471. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  6472.       right prime; a volume of 00h is off
  6473.     the default setting is for each input channel to be assigned to the
  6474.       same-numbered output channel at full (FFh) volume
  6475. ---function 05h---
  6476.  01h    BYTE    number of bytes read
  6477.  02h 128 BYTEs    buffer for drive bytes
  6478. ---function 06h---
  6479.  01h    DWORD    device parameters (see below)
  6480. ---function 07h---
  6481.  01h    BYTE    read mode
  6482.         00h cooked
  6483.         01h raw
  6484.  02h    WORD    sector size in bytes
  6485. ---function 08h---
  6486.  01h    DWORD    volume size in sectors
  6487. ---function 09h---
  6488.  01h    BYTE    media change status
  6489.         00h don't know
  6490.         01h media unchanged
  6491.         FFh media has been changed
  6492. ---function 0Ah---
  6493.  01h    BYTE    lowest audio track number
  6494.  02h    BYTE    highest audio track number
  6495.  03h    DWORD    start address of lead-out track (Red Book format)
  6496. --function 0Bh---
  6497.  01h    BYTE    track number (set by caller)
  6498.  02h    DWORD    starting point of track (Red Book format)
  6499.  06h    BYTE    track control info
  6500.         bits 15,14,12: track type (notice: bits not contiguous!)
  6501.             000 two audio channels, no pre-emphasis
  6502.             001 two audio channels with pre-emphasis
  6503.             010 data track
  6504.             100 four audio channels, no pre-emphasis
  6505.             101 four audio channels with pre-emphasis
  6506.             other reserved
  6507.         bit 13: digital copy permitted
  6508. ---function 0Ch---
  6509.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  6510.  02h    BYTE    track number
  6511.  03h    BYTE    point or index
  6512.  04h    BYTE    minute    \
  6513.  05h    BYTE    second     > running time within track
  6514.  06h    BYTE    frame    /
  6515.  07h    BYTE    zero
  6516.  08h    BYTE    "AMIN" or "PMIN"     \
  6517.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  6518.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  6519. ---function 0Dh---
  6520.  01h    DWORD    starting frame address (Red Book format)
  6521.  05h    DWORD    transfer address
  6522.  09h    DWORD    number of sectors to read
  6523. Note:    copies 96 bytes of sub-channel info per sector into buffer
  6524. ---function 0Eh---
  6525.  01h    BYTE    CONTROL and ADR byte
  6526.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  6527.  09h    BYTE    zero
  6528.  0Ah    BYTE    "AFRAME"
  6529.  
  6530. Bitfields for device parameters:
  6531. Bit(s)    Description
  6532.  0    door open
  6533.  1    door unlocked
  6534.  2    supports raw reading in addition to cooked
  6535.  3    writable
  6536.  4    can play audio/video tracks
  6537.  5    supports interleaving
  6538.  6    reserved
  6539.  7    supports prefetch requests
  6540.  8    supports audio channel control
  6541.  9    supports Red Book addressing in addition to HSG
  6542.  10    audio is playing
  6543. --------m-214402-----------------------------
  6544. INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  6545.     AX = 4402h
  6546.     BX = file handle for device "QEMM386$"
  6547.     CX = 0004h
  6548.     DS:DX -> DWORD buffer for API entry point
  6549. Return: CF clear if successful
  6550.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  6551.     CF set on error
  6552.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  6553. Note:    Quarterdeck recently (June 1993) documented this function, but the
  6554.       documentation incorrectly states that it is only available for
  6555.       QEMM 6+
  6556. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  6557. --------Q-214402-----------------------------
  6558. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  6559.     AX = 4402h
  6560.     BX = file handle for device "HOOKROM$"
  6561.     CX = 0004h
  6562.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  6563. Return: CF clear if successful
  6564.         DS:DX buffer filled
  6565.     CF set on error
  6566.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  6567. SeeAlso: AX=4402h/SF=01h
  6568.  
  6569. Format of hooked vector table entry:
  6570. Offset    Size    Description
  6571.  00h  5 BYTEs    FAR jump to actual interrupt handler
  6572.         (end of table if first byte is not EAh)
  6573.  05h    BYTE    interrupt vector number
  6574. --------d-214402-----------------------------
  6575. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  6576.     AX = 4402h
  6577.     BX = file handle for device "SCSIMGR$"
  6578.     CX = 0004h or 0005h (see notes)
  6579.     DS:DX -> buffer for result (see below), set to zeros before call
  6580. Return: CF clear if successful
  6581.         AX = 0004h or 0005h (see notes)
  6582.     CF set on error
  6583.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  6584. Note:    the variant of the call requesting five bytes is an UNDOCUMENTED
  6585.       extension supported by Adaptec's ASPI2DOS.SYS, ASPI4DOS.SYS, and
  6586.       ASPI7DOS.SYS; if made of a host manager which does not support the
  6587.       variant, only four bytes will be returned.  If the variant is
  6588.       supported, Adaptec's WINASPI.DLL assumes that the host manager is
  6589.       an "advanced" one which operates in either real or protected mode
  6590.       (and thus does not require a DPMI INT 31/AX=0301h call to be invoked
  6591.       from protected mode).     Support of the five-byte variant also appears
  6592.       to imply that an advanced ASPI host manager uses no temporary storage
  6593.       space except the SRB and the stack, and that it is fully reentrant.
  6594.     if called with a standard request for four bytes, even Adaptec's
  6595.       advanced drivers return only the requested four bytes containing the
  6596.       ASPI entry point address
  6597.     the function address is called with the address of a SCSI Request
  6598.       Block on the stack and the caller must clean up the stack
  6599. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  6600.  
  6601. Format of IOCTL result:
  6602. Offset    Size    Description
  6603.  00h    DWORD    function address
  6604.  04h    BYTE    number of SCSI host adapters supported by host manager
  6605.  
  6606. Values for ASPI request number:
  6607.  00h    "HA_INQ"    host adapter inquiry
  6608.  01h    "GET_TYPE"    get device type
  6609.  02h    "EXEC_SIO"    execute SCSI I/O
  6610.  03h    "ABORT_SRB"    abort SRB
  6611.  04h    "RESET_DEV"    reset SCSI device
  6612.  05h    "SET_HAPRMS"    set host adapter parameters
  6613.  06h    get disk drive information
  6614.  
  6615. Format of SCSI Request Block (64 bytes):
  6616. Offset    Size    Description
  6617.  00h    BYTE    request number (see above)
  6618.  01h    BYTE    request status (see below)
  6619.  02h    BYTE    host adapter ID
  6620.  03h    BYTE    request flags (see below)
  6621.  04h    DWORD    reserved
  6622. ---request 00h---
  6623.  08h    BYTE    (return) number of host adapters
  6624.  09h    BYTE    (return) target adapter ID
  6625.  0Ah 16 BYTEs    (return) SCSI manager ID
  6626.  1Ah 16 BYTEs    (return) host adapter ID
  6627.  2Ah 16 BYTEs    (return) host adapter-unique parameters
  6628. ---request 01h---
  6629.  08h    BYTE    target ID
  6630.  09h    BYTE    logical unit number
  6631.  0Ah    BYTE    (return) device type (see below)
  6632. ---request 02h---
  6633.  08h    BYTE    target ID
  6634.  09h    BYTE    logical unit number
  6635.  0Ah    DWORD    data allocation length
  6636.  0Eh    BYTE    sense allocation length
  6637.  0Fh    DWORD    data buffer pointer
  6638.  13h    DWORD    next request pointer (for linking)
  6639.  17h    BYTE    CDB length
  6640.  18h    BYTE    (return) host adapter status (see below)
  6641.  19h    BYTE    (return) target status (see below)
  6642.  1Ah    DWORD    post routine address
  6643.  1Eh    WORD    real mode Post DS
  6644.  20h    DWORD    SRB pointer
  6645.  24h    WORD    reserved
  6646.  26h    DWORD    SRB physical address
  6647.  2Ah 22 BYTEs    SCSIMGR$ workspace
  6648.  40h  N BYTEs    CCB, including sense data (20-24 bytes)
  6649. ---request 03h---
  6650.  08h    DWORD    address of SRB to abort
  6651. ---request 04h---
  6652.  08h    BYTE    target ID
  6653.  09h    BYTE    logical unit number
  6654.  0Ah 14 BYTEs    reserved
  6655.  18h    BYTE    (return) host adapter status (see below)
  6656.  19h    BYTE    (return) target status (see below)
  6657.  1Ah    DWORD    post routine address
  6658.  1Eh 34 BYTEs    workspace
  6659. ---request 05h---
  6660.  08h 16 BYTEs    host adapter-unique parameters
  6661. ---request 06h---
  6662.  08h    BYTE    target ID
  6663.  09h    BYTE    logical unit number
  6664.  0Ah    BYTE    disk drive flags
  6665.  0Bh    BYTE    INT 13h drive number
  6666.  0Ch    BYTE    preferred head number translation
  6667.  0Dh    BYTE    preferred sector size translation
  6668.  0Eh 10 BYTEs    reserved
  6669.  
  6670. Values for request status:
  6671.  00h    not done yet
  6672.  01h    completed successfully
  6673.  02h    aborted by host
  6674.  04h    SCSI I/O error
  6675.  80h    invalid
  6676.  81h    no adapter
  6677.  82h    no device attached
  6678.  else    status
  6679.  
  6680. Bitfields for request flags:
  6681. Bit(s)    Description
  6682.  0    posting enabled
  6683.  1    linking enabled
  6684.  2    direction
  6685.  3    transfer from SCSI target to host
  6686.  4    transfer from host to SCSI target
  6687. Note:    no data is transferred if both bits 3 and 4 are set
  6688.  
  6689. Values for host adapter status:
  6690.  00h    no error detected
  6691.  11h    select timeout
  6692.  12h    data overrun
  6693.  13h    bus error
  6694.  14h    bus failure
  6695.  
  6696. Values for target status:
  6697.  00h    no status
  6698.  02h    sense data stored in SRB
  6699.  08h    target busy
  6700.  18h    reservation error
  6701.  
  6702. Values for device type:
  6703.  00h    disk drive
  6704.  01h    tape drive (streamer)
  6705.  02h    printer
  6706.  03h    processor
  6707.  04h    WORM drive
  6708.  05h    CD-ROM drive
  6709.  06h    scanner
  6710.  07h    optical drive
  6711.  08h    autochanger
  6712.  09h    communications device
  6713.  
  6714. Values for disk drive flags:
  6715.  00h    no INT 13 access
  6716.  01h    INT 13 with DOS access
  6717.  02h    INT 13 without DOS access
  6718.  03h    invalid flags
  6719.  
  6720. Format of CCB:
  6721. Offset    Size    Description
  6722.  00h    BYTE    command code (see below)
  6723.  01h    BYTE    flags
  6724.         bits 4-0: vary by function
  6725.         bits 7-5: logical unit number
  6726.  02h    BYTE    "adr_1"
  6727.  03h    BYTE    "adr_0"
  6728.  04h    BYTE    length
  6729.  05h    BYTE    control
  6730.     ...
  6731.  06h/0Ah 14 BYTEs buffer for sense data (see below)
  6732.  
  6733. Values for CCB command code:
  6734.  00h    test unit ready
  6735.  01h    rewind
  6736.  03h    request sense data
  6737.  05h    get block size limits
  6738.  08h    Group 0 read
  6739.  0Ah    Group 0 write
  6740.  10h    write file marks
  6741.  11h    SCSI Space (set position?)
  6742.  12h    SCSI Inquire
  6743.  15h    set mode information
  6744.  16h    reserve SCSI device
  6745.  17h    release SCSI device
  6746.  19h    erase
  6747.  1Ah    request mode information
  6748.  1Bh    load/unload media
  6749.  1Dh    request target self-check
  6750.  24h    set window parameters
  6751.  25h    get window parameters
  6752.  28h    Group 1 read
  6753.  2Ah    Group 1 write
  6754.  31h    document feeder control
  6755.  34h    get scan data status
  6756. ---vendor-specific commands---
  6757.  D3h    get document feeder status
  6758.  D4h    set document feeder mode
  6759.  
  6760. Format of sense data:
  6761. Offset    Size    Description
  6762.  00h    BYTE    error code (bit 7 set if valid)
  6763.  01h    BYTE    segment number
  6764.  02h    BYTE    sense key
  6765.         bit 6: EOM
  6766.         bit 5: ILI
  6767.         bits 0-3: sense key (see below)
  6768.  03h  4 BYTEs    information bytes
  6769.  07h    BYTE    additional sense length (0Ah)
  6770.  08h  4 BYTEs    command-specific information
  6771.  0Ch    BYTE    additional sense code
  6772.  0Dh    BYTE    additional sense code qualifier
  6773.  0Eh    BYTE    field replaceable unit code
  6774.  0Fh  3 BYTEs    sense key specific bytes
  6775.  
  6776. Values for sense key:
  6777.  00h    no sense data
  6778.  02h    SCSI unit not ready
  6779.  03h    media error
  6780.  04h    unrecoverable hardware error
  6781.  05h    illegal parameter in CDB
  6782.  06h    target has been reset
  6783.  0Bh    target aborted command
  6784. --------m-214402-----------------------------
  6785. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  6786.     AX = 4402h
  6787.     BX = file handle for device "386MAX$$"
  6788.     CX = number of bytes to read
  6789.     DS:DX -> BYTE 03h followed by 386MAX state buffer (see below)
  6790. Return: CF clear if successful
  6791.         buffer at DS:DX+1 filled
  6792.         AX = number of bytes actually copied
  6793.     CF set on error
  6794.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  6795. Notes:    if the value given in CX is less than the size of the state record
  6796.       (5Ah for v6.01, 66h for v7.00), only a partial state record will be
  6797.       returned
  6798.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  6799.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  6800.       56h bytes for v5.11.
  6801.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  6802.       the word at offset 25h in the returned state, load all other
  6803.       registers as needed for the desired function, and execute an
  6804.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  6805.       if it is not otherwise modified by the API function.    For safety,
  6806.       in case a function is not supported or 386MAX is not present, SP
  6807.       should be saved and restored around the API call.
  6808.     Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all
  6809.       use the 386MAX API; LAN Manager and Windows for Workgroups reportedly
  6810.       make some calls incorrectly
  6811. SeeAlso: AX=4403h/SF=03h"386MAX",INT 67/AH=3Fh
  6812.  
  6813. Format of 386MAX v6.01+ state:
  6814. Offset    Size    Description
  6815.  -1    BYTE    (call) 03h
  6816.  00h  6 BYTEs    signature "386MAX"
  6817.  06h  4 BYTEs    version string "N;NN" or "N.NN" (i.e. "6;01" for v6.01)
  6818.         (';' by default; apparently changed to a period when 386MAX
  6819.         has linked high RAM into DOS's memory chain)
  6820.  0Ah    WORD    segment of low-memory portion of 386MAX.SYS
  6821.  0Ch  2 BYTEs    ???
  6822.  0Eh    WORD    segment of ??? memory block or 0000h
  6823.  10h    WORD    bit flags 1 (see below)
  6824.  12h    WORD    starting address of video memory in KB
  6825.  14h  2 BYTEs    ???
  6826.  16h    WORD    total high DOS memory in KB
  6827.  18h  2 BYTEs    ???
  6828.  1Ah    WORD    available shared memory in KB
  6829.  1Ch    WORD    KBytes extended memory used by 386MAX
  6830.  1Eh  2 BYTEs    ???
  6831.  20h    WORD    total extended memory in KB
  6832.  22h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  6833.  24h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  6834.  26h    WORD    ??? (depends on DOS version)
  6835.  28h    WORD    size of ??? in paragraphs
  6836.  2Ah    DWORD    machine type (see below)
  6837.  2Eh    DWORD    -> first DOS memory control block
  6838.  32h    WORD    system configuration flags (see below)
  6839.  34h    WORD    debugging flags 1 (see below)
  6840.  36h    WORD    debugging flags 2 (see below)
  6841.  38h  2 BYTEs    ???
  6842.  3Ah    WORD    segment of first MCB in high memory chain
  6843.  3Ch    WORD    feature flags 1 (see below)
  6844.  3Eh    WORD    feature flags 2 (see below)
  6845.  40h    WORD    feature flags 3 (see below)
  6846.  42h    WORD    segment of first 386MAX control block??? (see below)
  6847.  44h    WORD    amount of memory to report available on INT 15/AH=88h
  6848.  46h  4 BYTEs    ???
  6849.  4Ah    WORD    number of K at start of address space swapped with fast
  6850.         extended memory (SWAP= parameter)
  6851.  4Ch  2 BYTEs    ???
  6852.  4Eh    WORD    segment address of ???
  6853.  50h    WORD    debugging flags 3 (see below)
  6854.  52h    DWORD    old INT 21h
  6855.  56h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  6856. ---386MAX v7.00---
  6857.  5Ah    DWORD    KB of extended memory managed by 386MAX
  6858.  5Eh    DWORD    bytes of extended memory (EXT= parameter)
  6859.  62h  4 BYTEs    ???
  6860.  
  6861. Bitfields for bit flags 1:
  6862. Bit(s)    Description
  6863.  1    ???
  6864.  2    allow A20 to be enabled/disabled???
  6865.  3    ??? (cleared by calling INT 67 functions or starting MSWindows)
  6866.  4    high RAM present???
  6867.  5    386MAX in AUTO mode
  6868.  6    386MAX enabled
  6869.  7    386MAX is providing EMS services
  6870.  8    ??? (affects API function 08h)
  6871.  9    A20 gate closed (A20 disabled) (see INT 15/AX=2402h)
  6872.  10    Weitek support enabled
  6873.  11    ???
  6874.  12    ROMs not shadowed???
  6875.  13    QPMS has been used
  6876.  14    ???
  6877.  15    ???
  6878.  
  6879. Bitfields for system configuration flags:
  6880. Bit(s)    Description
  6881.  1    ROM compressed???
  6882.  3    ???
  6883.  5    386MAX loaded into high memory
  6884.  6    Microchannel bus
  6885.  7    Weitek math coprocessor detected
  6886.  9    ??? (also generates INT 01 on ??? and INT 03 on ???)
  6887.  11    PC/XT (thus only single 8259 interrupt controller present, DMA only
  6888.         in 1st megabyte, etc)
  6889.  13    LMLTOP= specified
  6890.  14    enable A20 control???
  6891.  15    ???
  6892.  
  6893. Bitfields for debugging flags 1:
  6894. Bit(s)    Description
  6895.  0    DEBUG=LED
  6896.  1    DEBUG=X67
  6897.  2    DEBUG=INV
  6898.  3    DEBUG=EMSPTED
  6899.  4    DEBUG=JMP
  6900.  5    DEBUG=CALL
  6901.  6    DEBUG=HLT
  6902.  7    DEBUG=PMR
  6903.  8    DEBUG=CR3
  6904.  9    DEBUG=CAPS or DEBUG=INT
  6905.  10    DEBUG=RC
  6906.  11    DEBUG=ROM
  6907.  12    DEBUG=XM
  6908.  13    DEBUG=SOR
  6909.  14    DEBUG=XR
  6910.  15    DEBUG=EMSERR (generate INT 01 on returning error from EMS call)
  6911.  
  6912. Bitfields for debugging flags 2:
  6913. Bit(s)    Description
  6914.  0    DEBUG=ROMSWAP
  6915.  1    DEBUG=UNSHADOWROM
  6916.  2    DEBUG=COMPROM
  6917.  3    DEBUG=DPMIPHYS
  6918.  4    DEBUG=ALLROM
  6919.  5    DEBUG=VMS
  6920.  6    DEBUG=XMS (generate INT 01 on XMS calls)
  6921.  7    DEBUG=I06
  6922.  8    DEBUG=VCPI
  6923.  9    DEBUG=XDMA
  6924.  10    DEBUG=X09
  6925.  13    DEBUG=I67 (generate INT 01 on every INT 67 call)
  6926.  14    DEBUG=EVM (generate INT 01 on entering V86 mode)
  6927.  15    DEBUG=EMSSAVE or DEBUG=VDS
  6928.  
  6929. Bitfields for debugging flags 3:
  6930. Bit(s)    Description
  6931.  10    DEBUG=EPM
  6932.  12    DEBUG=ABIOS
  6933.  13    DEBUG=XMSPTED
  6934.  14    DEBUG=TIME
  6935.  15    DEBUG=SCRUB
  6936.  
  6937. Bitfields for feature flags 1:
  6938. Bit(s)    Description
  6939.  1    Weitek present
  6940.  2    no DPMI services
  6941.  3    NODMA
  6942.  4    TERSE
  6943.  5    NOROM
  6944.  6    NOPARITY
  6945.  8    NOFLEX (IGNOREFLEXFRAME)
  6946.  11    don't create UMBs
  6947.  12    don't backfill below video memory (NOLOW)
  6948.  13    FRAME= specified
  6949.  14    EXT= specified
  6950.  15    NOEMS, allow prior expanded memory manager to provide EMS
  6951.  
  6952. Bitfields for feature flags 2:
  6953. Bit(s)    Description
  6954.  0    UNSHIFT specified (FORCEA20 disabled)
  6955.  1    NOXRAM
  6956.  2    NOSCSI specified
  6957.  3    SCREEN specified
  6958.  4    enabled EISADMA
  6959.  5    slow DMA
  6960.  6    RESETKEYB specified
  6961.  7    ???
  6962.  9    TOP384
  6963.  10    ???
  6964.  11    NOWARMBOOT
  6965.  12    USE= specified
  6966.  13    ROM= specified
  6967.  
  6968. Bitfields for feature flags 3:
  6969. Bit(s)    Description
  6970.  0    Windows3 support enabled
  6971.  1    SHADOWROM
  6972.  2    don't compress ROM (NOCOMPROM)
  6973.  3    ??? (related to PRGREG=)
  6974.  4    ??? (related to PRGREG=)
  6975.  5    SHADOWRAM
  6976.  6    DOS4 specified
  6977.  7    NOLOADHIGH
  6978.  8    NOPULSE
  6979.  11    FORCEA20
  6980.  12    DMA buffer enabled
  6981.  13    NOSCRUB
  6982.  15    NOFRAME
  6983.  
  6984. Bitfields for machine type:
  6985. Bit(s)    Description
  6986.  12    Amstrad
  6987.  13    Epson
  6988.  14    Zenith Data Systems
  6989.  15    "ASEM"
  6990.  16    NEC
  6991.  17    "HPRS" model codes 69h and 6Ah
  6992.  18    Dell
  6993.  19    "CA"
  6994.  20    ITT (Xtra Business Systems/Alcatel)
  6995.  21    Toshiba 5100
  6996.  22    Olivetti
  6997.  23    Quadram Quad386 (BIOS model FEh, submodel A6h)
  6998.  24    Tandy???
  6999.  25    AST 386
  7000.  26    INBOARD, ??? version
  7001.  27    INBOARD, ??? version
  7002.  28    INBOARD, ??? version
  7003.  29    "HPRS"
  7004.  30    Compaq 386
  7005.  31    JET386
  7006.  
  7007. Format of 386MAX control block:
  7008. Offset    Size    Description
  7009.  00h    WORD    segment of next block (FFFFh if last)
  7010.  02h    WORD    segment of previous block (FFFFh if first)
  7011.  04h 12 BYTEs    filename
  7012.  10h    WORD    resident size in paragraphs
  7013.  12h    WORD    environment size???
  7014.  14h    WORD    real prsent environment size + 1 (0000h if ENVSAVE used)
  7015.  16h  2 BYTEs    ???
  7016.  18h    DWORD    initial size or SIZE=n in 386LOAD commandline
  7017.  1Ch    DWORD    SIZE=-1 ???
  7018.  20h    DWORD    SIZE= ???
  7019.  24h    BYTE    PRGREG= if specified, else FFh
  7020.  25h    BYTE    ENVREG= if specified, else FFh
  7021.  26h    BYTE    FlexFrame (00h not present, 01h present)
  7022.  27h  3 BYTEs    ???
  7023.  2Ah    BYTE    GROUP= or 00h if not present
  7024.  2Bh    BYTE    ???
  7025.  2Ch    WORD    PSP
  7026.  
  7027. Format of high memory info record:
  7028. Offset    Size    Description
  7029.  00h    WORD    segment address of memory region
  7030.  02h    WORD    size of memory region in paragraphs
  7031.  04h    BYTE    type or flags???
  7032.         00h if locked out
  7033.         02h if EMS page frame
  7034.         04h if high RAM
  7035.         42h if ROM
  7036.  05h    BYTE    ???
  7037.  
  7038. Format of ROM shadowing record:
  7039. Offset    Size    Description
  7040.  00h    WORD    logical start segment of ROM??? (may be used by BlueMAX when it
  7041.         squeezes together the ROMs to make room)
  7042.  02h    WORD    physical start segment of ROM
  7043.  04h  2 BYTEs    ???
  7044.  06h    WORD    size of shadowed ROM in paragraphs
  7045.  08h  2 BYTEs    ???
  7046.  0Ah    WORD    flags
  7047.         bit 15: shadowing enabled for this ROM???
  7048.         bit 14: ???
  7049.         bit 13: ???
  7050.         bit 12: ???
  7051.         bit 10: ???
  7052.  
  7053. Values for memory type:
  7054.  00h    unused by EMS
  7055.  01h    DOS
  7056.  04h    page frame overlapping ROM???
  7057.  80h    high memory
  7058.  84h    page frame???
  7059.  87h    video ROM???
  7060. Note:    the type may be 00h (unused) if the 16K page is split among different
  7061.       uses (such as ROM and high RAM)
  7062.  
  7063. Call 386MAX API (via OUT DX,AL) with:
  7064.     STACK: WORD value for DX
  7065.     AH = 00h unused
  7066.         Return: AH = 84h (unsupported function)
  7067.     AH = 01h get high memory information
  7068.         ES:DI -> buffer for array of high memory info records
  7069.             (see above)
  7070.         Return: CX = number of records placed in buffer
  7071.     AH = 02h get shadowed ROM info
  7072.         ES:DI -> buffer for array of ROM shadowing records (see above)
  7073.         Return: CX = number of records placed in buffer
  7074.     AH = 03h get 386MAX state
  7075.         ES:DI -> 90-byte buffer for state (see above)
  7076.         Return: AH = 00h (successful)
  7077.             buffer filled
  7078.     AH = 04h get memory types???
  7079.         ES:DI -> buffer for memory type info (array of bytes, one per
  7080.             16K page) (see above)
  7081.         Return:    CX = number of bytes placed in buffer
  7082.     AH = 05h get page table entries
  7083.         AL = A20 control (00h enable A20 first, 01h leave unchanged)
  7084.         CX = buffer size in bytes (0000h = enough for all memory from
  7085.             given start to end of memory managed by 386MAX)
  7086.         SI = first K to report (rounded down to 4K page)
  7087.         ES:DI -> buffer for returned page table entries
  7088.         Return: CX = number of bytes returned (four per 4K page)
  7089.             ES:DI buffer filled
  7090.     AH = 06h get memory speed info
  7091.         ES:DI -> buffer for memory speed records (see below)
  7092.         Return: AH = 00h (successful)
  7093.             CX = number of bytes placed in buffer
  7094.         Note:    this function can take over a second to execute
  7095.     AH = 07h map/unmap multiple handle pages
  7096.         DX = EMS handle (on stack)
  7097.         STACK: DWORD -> EMS mapping record
  7098.         Return:    AH = status (00h,80h,83h,8Ah,8Bh)
  7099.         Format of EMS mapping record:
  7100.         Offset    Size    Description
  7101.          00h    WORD    function
  7102.                 0000h use physical page numbers
  7103.                 0001h use segment addresses
  7104.          02h    WORD    EMS handle
  7105.          04h    WORD    number of mapping entries following
  7106.          06h 2N WORDs    logical page number and physical page/segment
  7107.                 logical page FFFFh means unmap physical page
  7108.         SeeAlso: INT 67/AH=50h
  7109.     AH = 08h "EMM2_GOREAL" check whether possible to disable 386MAX
  7110.         AL = ??? (00h or nonzero)
  7111.         Return: AH = status (00h OK, A4h not possible at this time)
  7112.         Note:    if AL=00h, this function always returns success
  7113.     AH = 09h toggle Bit Flags 1 flags
  7114.         BX = bitmask of bit flags 1's flags to toggle (see above)
  7115.         Return: AH = 00h (successful)
  7116.         Note:    enables A20 first
  7117.     AH = 0Ah toggle Debugging Flags 1 flags
  7118.         BX = bitmask of Debugging Flags 1's bits to toggle (see above)
  7119.         Return: AH = 00h (successful)
  7120.         Notes:    enables A20 first
  7121.             does ??? if bit 3 on after specified bits are toggled
  7122.     AH = 0Bh toggle Debugging Flags 2 flags
  7123.         BX = bitmask of Debugging Flags 2's bits to toggle (see above)
  7124.         Return: AH = 00h (successful)
  7125.         Note:    enables A20 first
  7126.     AH = 0Ch toggle feature flags 3
  7127.         BX = bitmask of feature flags 3's bits to toggle (see above)
  7128.         Return: AH = 00h (successful)
  7129.         Note:    enables A20 first
  7130.     AH = 0Dh specify 386MAX high-memory location
  7131.         BX = segment address of high-memory real-mode portion of 386MAX
  7132.         CX = current segment of real-mode stub???
  7133.         Return: AH = status (00h successful)
  7134.             ???
  7135.     AH = 0Eh CRT controller register virtualization
  7136.         AL = subfunction
  7137.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  7138.             01h trap accesses to CRTC I/O ports
  7139.     AH = 0Fh reboot system
  7140.         Return: never
  7141.     AH = 10h unused
  7142.         Return: AH = 84h (unsupported function)
  7143.     AH = 11h get high memory information
  7144.         ES:DI -> 96-byte buffer for high memory info
  7145.         Return: AH = 00h (successful)
  7146.             ES:DI buffer filled
  7147.         Notes:    each byte in buffer contains bit flags for a 4K page in
  7148.               the A000h-FFFFh region
  7149.                 bit 0: page is writeable
  7150.                 bit 1: physical address same as linear address
  7151.                 bit 2: EMS page frame
  7152.                 bit 6: page is part of the QPMS window
  7153.             this function can take over a second to execute,
  7154.               because it does a 128K read for each page in an
  7155.               attempt to flush any RAM cache the system may have
  7156.     AH = 12h shadow RAM mapping
  7157.         AL = subfunction
  7158.             00h unshadow ROMs (except page FFh if NOWARMBOOT set)
  7159.             01h map shadow RAM into ROM regions???
  7160.         Return: AH = 00h (successful) if AL=00h or 01h
  7161.             AH = 8Fh otherwise
  7162.     AH = 13h shadow RAM page protection
  7163.         AL = subfunction
  7164.             00h set all shadowed ROM 4K pages to read-only
  7165.             01h set all shadowed ROM 4K pages to read-write
  7166.         Return: AH = 00h (successful) if AL=00h or 01h
  7167.             AH = 8Fh otherwise
  7168.     AH = 14h get Programmable Option Select info???
  7169.         ES:DI -> 54-byte buffer for POS data???
  7170.         Return: AH = 00h if successful
  7171.             AH = A4h on error
  7172.         Note:    the buffer consists of nine 6-byte fields; the first
  7173.               eight for slots 1-8, the last for the system board
  7174.     AH = 15h ???
  7175.         ???
  7176.         Return: ???
  7177.     AH = 16h get 386MAX memory usage screen
  7178.         ES:DI -> buffer for memory info display
  7179.         CX = size of buffer in bytes
  7180.         Return:    ES:DI buffer filled with '$'-terminated string (if
  7181.                 large enough to hold entire usage screen)
  7182.         Note:    the screen is 0303h bytes in v7.00
  7183.     AH = 17h Windows 3 startup/termination
  7184.         AL = subfunction
  7185.             00h Windows3 initializing
  7186.             DX (on stack) = Windows startup flags
  7187.             DI = Windows version number (major in upper byte)
  7188.             ES:BX = 0000h:0000h
  7189.             DS:SI = 0000h:0000h
  7190.             Return: CX = 0000h if OK for Windows to load
  7191.                    <> 0 if Windows should not load
  7192.                 ES:BX -> startup info structure
  7193.                 DS:SI -> Virtual86 mode enable/disable callback
  7194.             01h Windows3 terminating
  7195.             ES:BX -> ???
  7196.             DX (on stack) = Windows exit flags
  7197.             Return: ???
  7198.     AH = 18h QPMS (Qualitas Protected Memory Services)
  7199.         AL = subfunction
  7200.             00h get QPMS configuration
  7201.             Return: BX = starting segment of QPMS memory window
  7202.                 CX = number of 4K pages reserved for QPMS???
  7203.                 DX = number of 4K pages in QPMS window???
  7204.             01h map QPMS memory page???
  7205.             BX = 4K page number within memory reserved for QPMS???
  7206.             CL = 4K page number within QPMS memory window???
  7207.             02h mark all QPMS memory read-only
  7208.             03h mark all QPMS memory read-write
  7209.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  7210.     AH = 19h get linear address for physical address
  7211.         EDX = physical address (low word on stack)
  7212.         Return: AH = status
  7213.                 00h successful
  7214.                 EDX = linear address at which physical address
  7215.                     may be accessed
  7216.                 8Bh physical address currently not addressable
  7217.         Note:    enables A20 first
  7218.     AH = 1Ah set page table entry
  7219.         EDX = new page table entry (low word on stack)
  7220.         ESI = linear address of page to map (bits 0-11 clear)
  7221.         Return: AH = status (00h,8Bh)
  7222.         Note:    enables A20 first
  7223.     AH = 1Bh get ???
  7224.         Return: AH = status
  7225.             BX = ???
  7226.             CX = number of ???
  7227.             EDX = physical address of ???
  7228.     AH = 1Ch get original interrupt vector
  7229.         AL = interrupt vector (00h-7Fh)
  7230.         Return: AH = 00h (successful)
  7231.             EDX = original vector before 386MAX loaded (segment in
  7232.                 high word, offset in low word)
  7233.         Note:    no range checking is performed; requests for INTs 80h-
  7234.               FFh will return random values
  7235.     AH = 1Dh display string???
  7236.         SI = ???
  7237.         Return: AH = 00h (successful)
  7238.             ???
  7239.         Note:    this function appears to be broken in v7.00
  7240.     AH = 1Eh get memory info
  7241.         ES:DI -> memory info (see below)
  7242.         Return: ???
  7243.     AH = 1Fh get DPMI host information
  7244.         Return: AX = 0000h if successful
  7245.             BX = DPMI flags (see INT 31/AX=0400h)
  7246.             CL = CPU type (02h = 80286, 03h = 80386, etc.)
  7247.             DX = DPMI ver supported (DH=major, DL=2-digit minor)
  7248.             SI = ???
  7249.             ES???:DI -> ???
  7250.         Note:    NOP if NODPMI switch specified
  7251.     AH = 20h (v7.00) get ???
  7252.         AL = index of ???
  7253.         Return: EDX = ??? for specified ???
  7254.     AH = 21h (v7.00) STACKS support
  7255.         AL = 00h get STACKS parameters
  7256.         Return: BX = ??? (0060h for v7.00)
  7257.             CX = number of stacks for hardware interrupts
  7258.             DX = size of each stack in bytes
  7259.             SI = ??? (low and high bytes are separate values)
  7260.             DI = ??? (low and high bytes are separate values)
  7261.                 low byte = logical page number set by subfn 02h
  7262.             ES = ???
  7263.         AL = 01h set ??? "EMM2_DSTKS"
  7264.         EBX = ???
  7265.         ECX = ???
  7266.         AL = 02h set ???
  7267.         BL = logical page number for ??? (00h-03h)
  7268.         Return: AH = status (00h,8Ah)
  7269.     AH = 22h (v7.00) call ??? for every load module
  7270.         AL = which function to call
  7271.         00h call ???
  7272.         else call ????
  7273.         Return: AH = 00h
  7274.         Note: if AL=00h, calls the protected-mode function pointed at by
  7275.         the DWORD at offset 22h from the start of each module installed
  7276.         by a LOAD= directive; if AL<>00h, it calls the function
  7277.         pointed at by the DWORD at offset 28h of the load module
  7278.     AH = 23h (v7.00) ???
  7279.         AL = 00h set ???
  7280.         BL = ???
  7281.         Return:    AH = 00h or unchanged (depending on ???)
  7282.         AL = 01h set ???
  7283.         BL = ???
  7284.         BH = ???
  7285.         CX = ???
  7286.         DX = ??? (on top of stack)
  7287.         Return: AH = status (00h if successful, 8Fh once table full)
  7288.         Note:    this call adds one entry to an internal table on each
  7289.               call, until the table is full
  7290.         AL = 02h get ???
  7291.         CX = size of buffer
  7292.         ES:DI -> buffer for ??? (60 bytes total data)
  7293.         Return: CX = number of bytes actually returned
  7294.         Note:    returns the array storing the values set with AX=2301h
  7295.         Format of one entry in array:
  7296.         Offset    Size    Description
  7297.          00h    BYTE    ??? (BL from subfn 01h)
  7298.          01h    WORD    ??? (CX from subfn 01h)
  7299.          03h    BYTE    ??? (BH from subfn 01h)
  7300.          04h    WORD    ??? (DX from subfn 01h)
  7301.         AL = 03h set ??? name/path
  7302.         ES:DI -> buffer containing ASCIZ ???
  7303.         AL = 04h get ???
  7304.         ES:DI -> buffer for ASCIZ ???
  7305.         Note: the ASCIZ string for subfunctions 03h and 04h does not appear
  7306.         to be used by 386MAX, and may serve merely for communication
  7307.         between two other Qualitas programs
  7308.     AH = 24h (v7.00) high memory control
  7309.         AL = 00h get high memory state
  7310.         Return: BX = current state
  7311.                 00h high memory removed from DOS memory chain
  7312.                 01h high memory included in DOS memory chain
  7313.         AL = 01h set high memory state
  7314.         BX = new state
  7315.             00h high memory removed from DOS memory chain
  7316.             01h high memory included in DOS memory chain
  7317.             else
  7318.             Return: ??? (error, but return varies according to ???)
  7319.     AH = 25h (v7.00) remove high RAM from DOS memory chain
  7320.     AH = 26h (v7.00) ???
  7321.         BX = ???
  7322.         CX = ???
  7323.         SI = ???
  7324.         DI = ???
  7325.         Return: AH = status
  7326.             BX = ???
  7327.             CX = ???
  7328.     AH = 27h (v7.00) ???
  7329.         AL = 00h get ???
  7330.         Return: BX = number of paragraphs for ???
  7331.         AL = 01h ???
  7332.         BX = ???
  7333.         ES??? = ???
  7334.         AL = 02h ???
  7335.         ???
  7336.         AL = 03h ???
  7337.         CX = ???
  7338.         DX = ???
  7339.         ES??? = ???
  7340.         Return: ???
  7341.     AH = 28h (v7.00) get ???
  7342.         Return: AH = status (00h,8Fh) (see INT 67/AH=40h)
  7343.             if AH=00h,
  7344.                 CX = ???
  7345.                 DX = ???
  7346.     AH = 29h (v7.00) get ???
  7347.         Return: AX = ???
  7348.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  7349.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  7350. Return: AH = status (as for EMS INT 67 calls)
  7351.         00h successful
  7352.         80h internal error
  7353.         81h hardware malfunction
  7354.         83h invalid handle
  7355.         84h    undefined function
  7356.         8Ah invalid logical page nuber
  7357.         8Bh illegal physical page number
  7358.         8Fh undefined subfunction
  7359.         A4h access denied
  7360.         etc.
  7361.     STACK popped (value placed in DX if no specific return value for DX)
  7362.  
  7363. Format of memory speed record:
  7364. Offset    Size    Description
  7365.  00h    DWORD    page table entry for 4K page
  7366.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  7367.         entire 4K page
  7368.  
  7369. Format of memory info [array]:
  7370. Offset    Size    Description
  7371.  00h    DWORD    linear start address
  7372.  04h    DWORD    size in bytes
  7373.  08h    WORD    XMS handle (if next byte = 04h)
  7374.         ??? (if next byte = 05h)
  7375.         ??? (if next byte = 06h)
  7376.         ??? (if next byte = 13h)
  7377.         ??? (if next byte = 14h)
  7378.         ??? (if next byte = 15h)
  7379.         ??? (if next byte = 23h)
  7380.         ??? (if next byte = 24h)
  7381.         ??? (if next byte = 26h)
  7382.         else unused
  7383.  0Ah    BYTE    type
  7384.         00h = ???, 01h = VDISK,
  7385.         02h = INT 15h extended memory, 03h = ??? extended,
  7386.         04h = XMS handle's memory, 05h = ???, 06h = ???, 07h = ???,
  7387.         08h = ???, 09h = ???, 0Ah = ???, 0Bh = ???,
  7388.         11h = ???, 12h = ???, 14h = ???, 15h = ???,
  7389.         19h = ???, 1Ah = ???, 1Bh = ???,
  7390.         1Ch = ???, 1Dh = ???, 1Eh = ???, 1Fh = ???,
  7391.         20h = ???, 21h = ???, 23h = ???, 24h = ???,
  7392.         26h = ???
  7393.  0Bh    BYTE    ??? (00h for types 00h-03h, 07h-0Bh, 19h-21h;
  7394.              80h for types 04h/13h-15h/23h-26h;
  7395.             ??? for type 05h)
  7396. --------V-214402-----------------------------
  7397. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  7398.     AX = 4402h
  7399.     BX = file handle for device "PGS1600$"
  7400.     CX = 0018h (size of buffer)
  7401.     DS:DX -> configuration buffer (see below)
  7402. Return: CF clear if successful
  7403.         buffer filled
  7404.         AX = number of bytes actually copied
  7405.     CF set on error
  7406.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7407. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  7408.       display adapter, which provides a 1600x1200 monochrome display as
  7409.       well as one of two emulations, MDA or CGA.
  7410. SeeAlso: AX=4403h"PGS1600"
  7411.  
  7412. Format of configuration information:
  7413. Offset    Size    Description
  7414.  00h    WORD    version (high byte = major, low byte = minor)
  7415.  02h    WORD    board initialisation mode
  7416.  04h    WORD    board I/O address
  7417.         03D0h CGA emulation
  7418.         03B0h MDA emulation
  7419.         0390h no emulation
  7420.         0350h no emulation, alternate
  7421.  06h    WORD    emulation buffer segment
  7422.         B800h    CGA emulation
  7423.         B000h    MDA emulation
  7424.         0000h    no emulation
  7425.  08h    WORD    PG1600 graphics buffer segment
  7426.  0Ah    WORD    number of bytes between consecutive graphic rows
  7427.  0Ch    WORD    horizontal pixel size
  7428.  0Eh    WORD    vertical pixel size
  7429.  10h    WORD    horizontal dots per inch
  7430.  12h    WORD    vertical dots per inch
  7431.  14h    WORD    graphics buffer bits per pixel
  7432.  16h    WORD    monitor bits per pixel
  7433. --------N-214402-----------------------------
  7434. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  7435.     AX = 4402h
  7436.     BX = file handle referencing device "$IPCUST"
  7437.     CX, DS:DX ignored
  7438. Return: CF clear if successful
  7439.         AX destroyed
  7440.     CF set on error
  7441.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7442. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  7443.       version 2.05.     If less than the entire data is read or written,
  7444.       the next read/write continues where the previous one ended; this
  7445.       call and AX=4403h both reset the location at which the next
  7446.       operation starts to zero
  7447.     v2.1+ uses a new configuration method, but allows the installation
  7448.       of IPCUST.SYS for backward compatibility with other software which
  7449.       must read the PC/TCP configuration
  7450. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  7451. --------N-214402-----------------------------
  7452. INT 21 - WORKGRP.SYS - GET API ENTRY POINT
  7453.     AX = 4402h
  7454.     BX = file handle for device "NET$HLP$"
  7455.     CX = 0008h
  7456.     DS:DX -> buffer for entry point record
  7457. Return: CF clear if successful
  7458.         AX = number of bytes actually read
  7459.     CF set on error
  7460.         AX = error code
  7461. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  7462.       permits communication with PCs running Windows for Workgroups or
  7463.       LAN Manager
  7464. SeeAlso: AH=3Fh"WORKGRP.SYS"
  7465.  
  7466. Format of entry point record:
  7467. Offset    Size    Description
  7468.  00h    WORD    3633h  \ signature???
  7469.  02h    WORD    EF6Fh  /
  7470.  04h    DWORD    address of entry point
  7471. Note:    first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using
  7472.       IOCTL rather than READ to get the entry point record
  7473.  
  7474. Call WORKGRP entry point with:
  7475.     STACK:    WORD    function number (0000h-0009h)
  7476. Return: STACK unchanged
  7477.  
  7478. Call WORKGRP function 00h with:
  7479.     STACK:    WORD    0000h (function "get ???")
  7480. Return: DX:AX -> data table
  7481.  
  7482. Call WORKGRP function 01h with:
  7483.     STACK:    WORD    0001h (function "hook ???")
  7484. Return: STACK:    DWORD    pointer to ???
  7485.         WORD    0001h (function number)
  7486.  
  7487. Call WORKGRP function 02h with:
  7488.     STACK:    WORD    0002h (function "unhook ???")
  7489.     ???
  7490. Return: ???
  7491.  
  7492. Call WORKGRP function 03h with:
  7493.     STACK:    WORD    0003h (function "reenable printer port")
  7494.         WORD    LPT port number
  7495. Return: ???
  7496.  
  7497. Call WORKGRP function 04h with:
  7498.     STACK:    WORD    0004h (function "disable printer port")
  7499.         WORD    LPT port number
  7500. Return: ???
  7501.  
  7502. Call WORKGRP function 05h with:
  7503.     STACK:    WORD    0005h (function "???")
  7504.         ???
  7505. Return: ???
  7506.  
  7507. Call WORKGRP function 06h with:
  7508.     STACK:    WORD    0006h (function "???")
  7509. Return: STACK unchanged
  7510.     AX = 0000h
  7511.     DX = 0000h
  7512.  
  7513. Call WORKGRP functions 07h-09h with:
  7514.     STACK:    WORD    0007h-0009h (NOP functions)
  7515. Return: STACK unchanged
  7516.     AX = 0001h
  7517.     DX = 0000h
  7518. --------N-214402-----------------------------
  7519. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  7520.     AX = 4402h
  7521.     BX = file handle referencing device "10BEUI$"
  7522.     DS:DX -> parameter record (see below)
  7523.     CX ignored
  7524. Return: CF clear if successful
  7525.         AX destroyed
  7526.     CF set on error
  7527.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7528. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  7529.  
  7530. Format of parameter record:
  7531. Offset    Size    Description
  7532.  00h    WORD    000Ah (function number???)
  7533.  02h    WORD    ???
  7534.  04h    DWORD    pointer to buffer for ???
  7535.  08h  4 BYTEs    ???
  7536.  0Ch    WORD    transfer size
  7537. --------N-214402-----------------------------
  7538. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  7539.     AX = 4402h
  7540.     BX = file handle referencing device "MEMMGR0$"
  7541.     DS:DX -> 6-byte buffer for interface info (see below)
  7542.     CX ignored
  7543. Return: CF clear if successful
  7544.         AX destroyed
  7545.     CF set on error
  7546.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7547. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  7548.  
  7549. Format of interface info:
  7550. Offset    Size    Description
  7551.  00h    DWORD    address of entry point (see below)
  7552.  04h    WORD    version (0500h for v5.00)
  7553.  
  7554. Call entry point with:
  7555.     AL = 01h ???
  7556.         BX = ???
  7557.         Return: CF clear if successful
  7558.             CF set on error
  7559.             AX = error code
  7560.     AL = 02h ???
  7561.         ???
  7562.     AL = 03h ???
  7563.         ???
  7564.     AL = 04h set/restore memory allocation strategy
  7565.         BX = subfunction
  7566.         0000h set strategy
  7567.         0001h restore strategy
  7568.         Return: CF clear if successful
  7569.             CF set on error (if function disabled)
  7570.             various registers destroyed
  7571.     AL = other
  7572.         Return: CF set
  7573.             AX = 0000h
  7574.             BL = 01h
  7575. --------m-214402SF00-------------------------
  7576. INT 21 U - Memory Managers - GET API ENTRY POINT
  7577.     AX = 4402h subfn 00h
  7578.     BX = file handle for device "EMMXXXX0"
  7579.     CX = 0006h (size of buffer in bytes)
  7580.     DS:DX -> buffer for API entry point record (see below)
  7581.         first byte must be 00h on entry
  7582. Return: CF clear if successful
  7583.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  7584.     CF set on error
  7585.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7586. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  7587.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  7588.     if no other program has hooked INT 67, an alternate installation
  7589.       check for CEMM is testing for the string
  7590.       "COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  7591.       handler's segment; if present, the word at offset 12h contains the
  7592.       offset of the API entry point
  7593. SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
  7594.  
  7595. Format of API entry point record:
  7596. Offset    Size    Description
  7597.  00h    WORD    ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
  7598.  02h    DWORD    manager's private API entry point (see below,INT 67/AX=FFA5h)
  7599.  
  7600. Call CEMM v5.10+ entry point with:
  7601.     AH = 00h get memory manager's state
  7602.         Return: AH = state
  7603.             bit 0: turned OFF
  7604.             bit 1: AUTO mode enabled
  7605.     AH = 01h set memory manager's state
  7606.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  7607.         Return: CF clear if successful
  7608.             CF set on error
  7609.     AH = 02h Weitek coprocessor support
  7610.         AL = subfunction
  7611.         00h get Weitek support state
  7612.             Return: AL = status
  7613.                 bit 0: Weitek coprocessor is present
  7614.                 bit 1: Weitek support is enabled
  7615.         01h turn on Weitek support
  7616.         02h turn off Weitek support
  7617.         Return: CF clear if successful
  7618.             CF set on error
  7619.             AH = error code (01h invalid subfunc, 02h no Weitek)
  7620.     AH = 05h get statistics
  7621.         ???
  7622.     AH > 06h
  7623.         Return: CF set
  7624.             AH = 01h (invalid function)
  7625. Notes:    AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
  7626.       compatibility with earlier versions of CEMM
  7627.     in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
  7628.       stating that a different version of CEMM is installed and it is
  7629.       therefore not possible to display the statistics
  7630. --------m-214402SF01-------------------------
  7631. INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
  7632.     AX = 4402h subfn 01h
  7633.     BX = file handle for device "EMMXXXX0"
  7634.     CX = 0006h (size of buffer in bytes)
  7635.     DS:DX -> buffer for EMM import structure record (see below)
  7636.         first byte must be 01h on entry
  7637. Return: CF clear if successful
  7638.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  7639.     CF set on error
  7640.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7641. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+,
  7642.       QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
  7643.       as it starts up
  7644.     for QEMM-386, this call always returns an error if Windows3 support
  7645.       has been disabled with the NW3 switch
  7646. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
  7647. SeeAlso: INT 67/AH=3Fh
  7648.  
  7649. Format of EMM import structure record:
  7650. Offset    Size    Description
  7651.  00h    DWORD    physical address of EMM import structure
  7652.  04h    BYTE    EMM import structure major version
  7653.  05h    BYTE    EMM import structure minor version
  7654. Note:    version 1.00 contains only EMS information (Windows 3.0+)
  7655.     version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
  7656.     version 1.11 is version 1.10 plus memory manager maker/product name
  7657.  
  7658. Format of Global EMM Import record:
  7659. Offset    Size    Description
  7660.  00h    BYTE    bit flags
  7661.         bit 2: ???
  7662.         bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
  7663.         bit 4: no UMB???
  7664.  01h    BYTE    reserved (0)
  7665.  02h    WORD    size of structure in bytes
  7666.  04h    WORD    structure version
  7667.  06h    DWORD    reserved
  7668.  0Ah 384 BYTEs    64 EMS frame status records (see below), one per 16K of
  7669.           real-mode 1M address space
  7670. 18Ah    BYTE    ??? (must be at least 3*number_of_EMS_frames+4)
  7671. 18Bh    BYTE    number of UMB frame descriptors following
  7672. 18Ch 4N DWORDs    UMB frame descriptors
  7673.         each is 4 DWORDs giving physical page numbers for the four
  7674.           4K pages of a 16K EMS frame (00000000h if non-UMB page)
  7675. var    BYTE    number of EMS handle info records following
  7676.     16N BYTEs    EMS handle info records (see below)
  7677. ---version 1.10+ ---
  7678.     DWORD    realmode INT 67 vector (used by Windows to set breakpoints)
  7679.     DWORD    physical address of HMA page table values
  7680.     BYTE    number of free page entries following
  7681.      2N DWORDs    free page entries
  7682.         each is:
  7683.           DWORD    physical page number
  7684.           DWORD number of consecutive physical pages
  7685.     BYTE    number of XMS handle info records following
  7686.         00h if memory manager does not emulate XMS or has real mode
  7687.           XMS code which can execute in the Windows environment
  7688.     12N BYTEs    XMS handle info records (see below)
  7689.     BYTE    number of free UMB info records following
  7690.      2N WORDs    free UMB info records
  7691.         each is:
  7692.           WORD    real mode start segment
  7693.           WORD    size in paragraphs
  7694. ---version 1.11---    
  7695.      20 BYTEs    blank-padded maker name
  7696.      20 BYTEs    blank-padded product name
  7697.  
  7698. Format of EMS frame status record:
  7699. Offset    Size    Description
  7700.  00h    BYTE    frame type (see below)
  7701.  01h    BYTE    owner handle (00h/FFh = none) from frame including UMB
  7702.         index to UMB frame descriptors
  7703.  02h    WORD    logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
  7704.  04h    BYTE    EMS physical page number (FFh for non-EMS = don't care???)
  7705.  05h    BYTE    flags for non-EMS frames (00h for EMS frame)
  7706.         bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
  7707.           10: direct mapping (linear address = physical address)
  7708.           01: UMB mapping
  7709.  
  7710. Bitfields for EMS frame type:
  7711. Bit(s)    Description
  7712.  0    EMS frame
  7713.  1    (if EMS frame) in standard 64K page frame
  7714.  2    first 4K of frame is UMB
  7715.  3    second 4K of frame is UMB
  7716.  4    third 4K of frame is UMB
  7717.  5    last 4K of frame is UMB
  7718.  
  7719. Format of EMS handle info record:
  7720. Offset    Size    Description
  7721.  00h    BYTE    handle number (00h = system handle)
  7722.  01h    BYTE    flags
  7723.         bit 0: normal handle rather than system handle
  7724.         bit 2: ??? (set by some EMS managers)
  7725.  02h  8 BYTEs    EMS handle's name
  7726.  0Ah    WORD    number of 16K pages for handle
  7727.  0Ch    DWORD    physical address of page table entries forming page map
  7728. Note:    all values should be zero for the system handle if no large frame
  7729.       support is present
  7730.  
  7731. Format of XMS handle info record:
  7732. Offset    Size    Description
  7733.  00h    WORD    handle
  7734.  02h    WORD    flags
  7735.         bit 0: handle usable by Windows
  7736.             (already in use when Windows started if clear)
  7737.         bit 1: reserved (0)
  7738.  04h    DWORD    size in KB (may be zero, used only if flags bit 0 set)
  7739.  08h    DWORD    physical address (only if flags bit 0 set)
  7740. --------m-214402SF02-------------------------
  7741. INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
  7742.     AX = 4402h subfn 02h
  7743.     BX = file handle for device "EMMXXXX0"
  7744.     CX = 0002h (size of buffer in bytes)
  7745.     DS:DX -> buffer for memory manager version (see below)
  7746.         first byte must be 02h on entry
  7747. Return: CF clear if successful
  7748.         buffer filled
  7749.     CF set on error
  7750.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7751. Note:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  7752.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  7753. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
  7754.  
  7755. Format of memory manager version:
  7756. Offset    Size    Description
  7757.  00h    BYTE    major version
  7758.  01h    BYTE    minor version (binary)
  7759. --------m-214402-----------------------------
  7760. INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
  7761.     AX = 4402h
  7762.     BX = file handle for device "EMMXXXX0"
  7763.     CX = size of buffer in bytes (varies, see below)
  7764.     DS:DX -> buffer for returned data (see below)
  7765.         first byte must be set on entry to indicate desired data
  7766. Return: CF clear if successful
  7767.         buffer filled
  7768.     CF set on error
  7769.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7770. Notes:    an error is returned if the number of bytes to be read does not match
  7771.       the number of bytes returned for the specified data item
  7772.     this function is part of the interface which allows MS Windows to
  7773.       cooperate with memory managers
  7774. SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
  7775.  
  7776. Format of data buffer:
  7777. Offset    Size    Description
  7778.  00h    BYTE    (call) function
  7779.         03h get ???
  7780.         04h get ???
  7781. ---function 03h---
  7782.  00h    WORD    ???
  7783.  02h    WORD    ???
  7784. ---function 04h---
  7785.  00h    WORD    segment of UMB containing EMM386 code/data
  7786.  02h    WORD    number of paragraphs of EMM386 code/data in UMB
  7787.  04h    WORD    ???
  7788. --------V-214402-----------------------------
  7789. INT 21 - Compaq AG1024.SYS - RGDI - GET DRIVER LOCATION
  7790.     AX = 4402h
  7791.     BX = file handle for device "$$$$RGDI"
  7792.     CX = 0006h (size of returned data)
  7793.     DS:DX -> location record (see below)
  7794. Return: CF clear if successful
  7795.         buffer filled
  7796.     CF set on error
  7797.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7798. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  7799. SeeAlso: AX=4403h"RGDI"
  7800.  
  7801. Format of location record:
  7802. Offset    Size    Description
  7803.  00h    WORD    signature 55AAh
  7804.  02h    WORD    segment of ???
  7805.  04h    WORD    segment of device driver's code
  7806. --------N-214402-----------------------------
  7807. INT 21 - FTPSOFT.DOS v3.1 - GET ???
  7808.     AX = 4402h
  7809.     BX = file handle for device "FTPSOFT$"
  7810.     CX = size of buffer
  7811.     DS:DX -> buffer for data (see below)
  7812. Return: CF clear if successful
  7813.         buffer filled
  7814.     CF set on error
  7815.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7816. Program: FTPSOFT.DOS is a device driver for Protocol Manager support from
  7817.        FTP Software, Inc.
  7818. SeeAlso: AH=3Fh"PC/TCP",AX=4402h"NDIS"
  7819.  
  7820. Format of data:
  7821. Offset    Size    Description
  7822.  00h    WORD    (call) BA98h (if different, no data returned)
  7823.  02h    DWORD    -> NDIS common characteristics table (see AX=4402h"NDIS")
  7824.  06h    DWORD    (call) -> new dispatch table (see AX=4402h"NDIS")
  7825.  0Ah    DWORD    -> 28-byte buffer for ??? data
  7826.  0Eh    DWORD    ???
  7827.  12h    DWORD    -> FAR function to reset dispatch jump table to defaults
  7828.  16h    BYTE    ???
  7829. Note:    the addresses in the new dispatch table are copied into an internal
  7830.       jump table which may be reset by calling the function pointed at by
  7831.       offset 12h
  7832. --------n-214402-----------------------------
  7833. INT 21 U - PenDOS PENDEV.SYS - GET ENTRY POINTS
  7834.     AX = 4402h
  7835.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  7836.     CX = size of buffer (4 for $$PENDOS and a 4,8,12, or 16 for $$PD_REG)
  7837.     DS:DX -> buffer for entry point record (see below)
  7838. Return: CF clear if successful
  7839.         buffer filled
  7840.     CF set on error
  7841.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7842. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  7843.       which provides pen capability to keyboard-based programs, is bundled
  7844.       with IBM DOS 6.1
  7845. SeeAlso: AX=4403h"PENDEV.SYS"
  7846.  
  7847. Format of entry point record:
  7848. Offset    Size    Description
  7849.  00h    DWORD    -> array of jumps
  7850.  04h    WORD    offset of function to retrieve entry point
  7851.  06h  2 BYTEs    signature "Pe"
  7852.  08h    WORD    offset of function to set entry point
  7853.  0Ah  2 BYTEs    signature "nD"
  7854.  0Ch    WORD    offset of function to clear entry point
  7855.  0Eh    WORD    signature "OS"
  7856.  
  7857. Call function to retrieve entry point with:
  7858.     AX = index of entry point (0-9)
  7859. Return: CF clear if successful
  7860.         DX:AX -> desired entry point
  7861.     CF set on error (AX out of range)
  7862.  
  7863. Call function to set entry point with:
  7864.     AX = index of entry point (0-9)
  7865.     DX:SI -> new handler
  7866. Return: CF clear if successful
  7867.     CF set on error (AX out of range)
  7868.  
  7869. Call function to clear entry point with:
  7870.     AX = index of entry point (0-9)
  7871. Return: CF clear if successful
  7872.     CF set on error (AX out of range)
  7873. Note:    resets the jump at the specified entry point to its default target,
  7874.       which simply returns
  7875. --------N-214402-----------------------------
  7876. INT 21 U - LAN Manager - TCPDRV.DOS - API
  7877.     AX = 4402h
  7878.     BX = file handle referencing device "TCPDRV$"
  7879.     CX = 0019h
  7880.     DS:DX -> buffer containing request block
  7881. Return: CF clear if successful
  7882.         buffer filled
  7883.     CF set on error
  7884.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7885. Program: TCPDRV.DOS is the low-level device driver supporting LAN Manager's
  7886.       TCP/IP protocol stack
  7887.  
  7888. Format of request block:
  7889. Offset    Size    Description
  7890.  00h    BYTE    (call) function number
  7891.         00h initialize ???
  7892.         06h get ???
  7893.         07h get ???
  7894.  01h    BYTE    (call) 00h
  7895.         (return) error code if error, unchanged if successful
  7896.  02h    WORD    signature 4354h ('CT')
  7897. ---function 00h---
  7898.  04h    DWORD    (call) pointer to ??? FAR function
  7899.         function is called with ES:BX -> device driver request used to
  7900.           invoke this function
  7901.  08h  4 BYTEs    ???
  7902.  0Ch    DWORD    (call) pointer to ??? record, WORD at offset 22h is read
  7903.  10h    DWORD    (return) -> ??? buffer if 0000h:0000h on call
  7904. ---function 06h---
  7905.  04h  4 BYTEs    ???
  7906.  08h    DWORD    (return) pointer to ???
  7907. ---function 07h---
  7908.  04h    DWORD    (return) pointer to ??? record
  7909. --------y-214402-----------------------------
  7910. INT 21 U - PC Tools 9 CPRLOW.EXE - GET CODE AND DATA ADDRESSES
  7911.     AX = 4402h
  7912.     BX = file handle referencing device "RECLOWLD"
  7913.     DS:DX -> buffer for address list (see below)
  7914.     CX ignored
  7915. Return: CF clear if successful
  7916.         buffer filled
  7917.     CF set on error
  7918.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7919.  
  7920. Format of address list:
  7921. Offset    Size    Description
  7922.  00h    WORD    segment of CPRLOW code
  7923.  02h    WORD    offset in code segment of ??? entry point
  7924.         (switches into protected mode)
  7925.  04h    WORD    offset in code segment of jump array (see below)
  7926.  06h    WORD    segment of copy of interrupt vector table at CPRLOW load time
  7927. Note:    neither the entry point nor the jump array is valid until after a
  7928.       CPR /LOAD, because CPR.EXE installs the code into CPRLOW at runtime.
  7929.  
  7930. Format of jump array:
  7931. Offset    Size    Description
  7932.  00h  3 BYTEs    initialize CPRLOW interrupt hooks
  7933.  03h  3 BYTEs    reset timers and enable CPR (hotkey enable)
  7934.  06h  3 BYTEs    disable CPR (hotkey disable)
  7935.  09h  3 BYTEs    clear ??? flag, hotkey disable, and ???
  7936.  0Ch  3 BYTEs    initialize delay loop counter (destroys AX,BX,CX,DX)
  7937.  0Fh  3 BYTEs    disable CPR completely (commandline /DISABLE)
  7938.  12h  3 BYTEs    enable ??? if CPR enabled by both cmdline and hotkey
  7939.  15h  3 BYTEs    enable CPR (commandline /ENABLE)
  7940. --------D-214403-----------------------------
  7941. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  7942.     AX = 4403h
  7943.     BX = file handle referencing character device
  7944.     CX = number of bytes to write
  7945.     DS:DX -> data to write
  7946. Return: CF clear if successful
  7947.         AX = number of bytes actually written
  7948.     CF set on error
  7949.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7950. Notes:    format of data is driver-specific (see below for some specific cases)
  7951.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  7952.       KEYSTACK.SYS driver will push the specified characters on the
  7953.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  7954.       driver will push the characters onto the keyboard stack
  7955. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  7956. SeeAlso: INT 2F/AX=D44Fh
  7957. --------c-214403-----------------------------
  7958. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - CACHE CONTROL
  7959.     AX = 4403h
  7960.     BX = handle for device "SMARTAAR"
  7961.     CX = number of bytes to write
  7962.     DS:DX -> SMARTDRV control block (see below)
  7963. Return: CF clear if successful
  7964.         AX = number of bytes actually written
  7965.            = 0000h if control block too small for given command
  7966.     CF set on error
  7967.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  7968. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  7969.  
  7970. Format of SMARTDRV control block:
  7971. Offset    Size    Description
  7972.  00h    BYTE    function code
  7973.         00h flush cache
  7974.         01h flush and discard cache
  7975.         02h disable caching (flushes and discards cache first)
  7976.         03h enable caching
  7977.         04h control write caching
  7978.         05h set flushing tick count
  7979.         06h lock cache contents
  7980.         07h unlock cache contents
  7981.         08h set flush-on-reboot flag
  7982.         09h unused
  7983.         0Ah control full-track caching
  7984.         0Bh reduce cache size
  7985.         0Ch increase cache size
  7986.         0Dh set INT 13 chain address
  7987. ---function 04h---
  7988.  01h    BYTE    write caching control action
  7989.         00h turn off write-through
  7990.         01h turn on write-through
  7991.         02h turn off write buffering (also flushes cache)
  7992.         03h turn on write buffering (also flushes cache)
  7993. ---function 05h---
  7994.  01h    WORD    number of timer ticks between cache flushes
  7995. ---function 08h---
  7996.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  7997. ---function 0Ah---
  7998.  01h    BYTE    full-track writes are
  7999.         00h not cached
  8000.         01h cached
  8001. ---functions 0Bh,0Ch---
  8002.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  8003. ---function 0Dh---
  8004.  01h    DWORD    new address to which to chain on INT 13
  8005. Note:    the previous address is not preserved
  8006. --------d-214403-----------------------------
  8007. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  8008.     AX = 4403h
  8009.     BX = file handle referencing character device for CD-ROM driver
  8010.     CX = number of bytes to write
  8011.     DS:DX -> control block (see below)
  8012. Return: CF clear if successful
  8013.         AX = number of bytes actually written
  8014.     CF set on error
  8015.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8016. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  8017.  
  8018. Format of control block:
  8019. Offset    Size    Description
  8020.  00h    BYTE    function code
  8021.         00h eject disk
  8022.         01h lock/unlock door
  8023.         02h reset drive
  8024.         03h control audio channel
  8025.         04h write device control string
  8026.         05h close tray
  8027. ---functions 00h,02h,05h---
  8028.  no further fields
  8029. ---function 01h---
  8030.  01h    BYTE    lock function
  8031.         00h unlock door
  8032.         01h lock door
  8033. ---function 03h---
  8034.  01h    BYTE    input channel (0-3) for output channel 0
  8035.  02h    BYTE    volume for output channel 0
  8036.  03h    BYTE    input channel (0-3) for output channel 1
  8037.  04h    BYTE    volume for output channel 1
  8038.  05h    BYTE    input channel (0-3) for output channel 2
  8039.  06h    BYTE    volume for output channel 2
  8040.  07h    BYTE    input channel (0-3) for output channel 3
  8041.  08h    BYTE    volume for output channel 3
  8042. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  8043.       right prime; a volume of 00h is off
  8044. ---function 04h---
  8045.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  8046.         interpretation
  8047. --------d-214403-----------------------------
  8048. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  8049.     AX = 4403h
  8050.     BX = handle for device "SCSITAPE"
  8051.     CX = number of bytes to write
  8052.     DS:DX -> SCSITAPE control block (see below)
  8053. Return: CF clear if successful
  8054.         AX = number of bytes actually written
  8055.     CF set on error
  8056.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8057. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  8058.  
  8059. Format of SCSITAPE control block:
  8060. Offset    Size    Description
  8061.  00h    WORD    command type
  8062.         'F' Format (argument 1 = interleave, argument 2 = format type)
  8063.         'E' Erase
  8064.         'R' Rewind
  8065.         'L' Load
  8066.         'N' No Load
  8067.         'S' Space (argument 1 = count, argument 2 = type)
  8068.         'M' File Mark (argument 1 = count)
  8069.         'A' Reassign
  8070.  02h    WORD    argument 1
  8071.  04h    WORD    argument 2
  8072.  06h    WORD    segment of command buffer
  8073.  08h    WORD    offset of command buffer
  8074.  0Ah    WORD    length of command buffer
  8075. --------E-214403-----------------------------
  8076. INT 21 U - AI Architects - OS/x86??? - API
  8077.     AX = 4403h
  8078.     BX = handle for device "AIA_OS"
  8079.     CX = number of bytes to write (ignored)
  8080.     DS:DX -> 12-byte buffer, first byte is command:
  8081.             81h installation check
  8082.             82h get API entry point
  8083.             84h uninstall
  8084. Return: CF clear if successful
  8085.         AX = number of bytes actually written
  8086.     CF set on error
  8087.         AX = error code (01h,05h,06h,0Ch,0Dh) (see AH=59h)
  8088. Notes:    these functions are only available if the DOS extender was loaded as a
  8089.       device driver in CONFIG.SYS
  8090.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  8091. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  8092. Index:    installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86
  8093.  
  8094. Format of buffer on return:
  8095. Offset    Size    Description
  8096.  00h  4 BYTEs    signature "IABH"
  8097. ---if func 81h---
  8098.  (no additional fields)
  8099. ---if func 82h---
  8100.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  8101. ---if func 84h---
  8102.  04h    WORD    success indicator
  8103.  06h    WORD    segment of ???
  8104.  08h    WORD    segment of ??? memory block to free if nonzero
  8105.  0Ah    WORD    segment of ??? memory block to free if nonzero
  8106. --------V-214403-----------------------------
  8107. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  8108.     AX = 4403h
  8109.     BX = file handle for device "PGS1600$"
  8110.     CX = 0018h (size of buffer)
  8111.     DS:DX -> configuration buffer (see AX=4402h"PGS1600")
  8112. Return: CF clear if successful
  8113.         AX = number of bytes actually written
  8114.     CF set on error
  8115.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8116. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  8117.       display adapter, which provides a 1600x1200 monochrome display as
  8118.       well as one of two emulations, MDA or CGA.
  8119. SeeAlso: AX=4402h"PGS1600"
  8120. --------N-214403-----------------------------
  8121. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  8122.     AX = 4403h
  8123.     BX = file handle referencing device "$IPCUST"
  8124.     CX, DS:DX ignored
  8125. Return: CF clear if successful
  8126.         AX destroyed
  8127.     CF set on error
  8128.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8129. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  8130.       version 2.05.     If less than the entire data is read or written,
  8131.       the next read/write continues where the previous one ended; this
  8132.       call and AX=4402h both reset the location at which the next
  8133.       operation starts to zero
  8134.     v2.1+ uses a new configuration method, but allows the installation
  8135.       of IPCUST.SYS for backward compatibility with other software which
  8136.       must read the PC/TCP configuration
  8137. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  8138. --------V-214403-----------------------------
  8139. INT 21 - Compaq AG1024.SYS - CPQ_MGES - IOCTL OUTPUT
  8140.     AX = 4403h
  8141.     BX = file handle referencing device "CPQ_MGES"
  8142.     DS:DX -> request packet (see below)
  8143.     CX ignored
  8144. Return: CF clear if successful
  8145.         AX destroyed
  8146.         data buffer filled (if applicable)
  8147.         first word of request packet set to number of bytes of data
  8148.           available (amount returned is smaller of this and requested
  8149.           amount)
  8150.     CF set on error
  8151.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8152. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  8153. SeeAlso: AX=4403h"RGDI"
  8154.  
  8155. Format of request packet:
  8156. Offset    Size    Description
  8157.  00h    WORD    function
  8158.         0000h get ??? (26h bytes)
  8159.         0001h get ??? (36h bytes)
  8160.         0002h set ??? (same as returned by function 0001h)
  8161.         0003h get ??? (6 bytes)
  8162.         0004h get ???
  8163.         0005h get ???
  8164.         0006h get ??? (10h bytes)
  8165.         0007h set ??? (same as returned by function 0006h)
  8166. ---functions 00h-03h,06h,07h---
  8167.  02h    WORD    size of data buffer
  8168.  04h    DWORD    -> buffer for function's data
  8169.  ---functions 04h,05h---
  8170.  02h    WORD    ???
  8171.  04h    WORD    size of data buffer
  8172.  06h    DWORD    -> buffer to receive data
  8173. --------V-214403-----------------------------
  8174. INT 21 - Compaq AG1024.SYS - RGDI - IOCTL OUTPUT
  8175.     AX = 4403h
  8176.     BX = file handle referencing device "$$$$RGDI"
  8177.     DS:DX -> request packet (see below)
  8178.     CX ignored
  8179. Return: CF clear if successful
  8180.         AX destroyed
  8181.         data buffer filled (if applicable)
  8182.         first word of request packet set to number of bytes of data
  8183.           available (amount returned is smaller of this and requested
  8184.           amount)
  8185.     CF set on error
  8186.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8187. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  8188. SeeAlso: AX=4402h"RGDI",AX=4403h"CPQ_MGES"
  8189.  
  8190. Format of request packet:
  8191. Offset    Size    Description
  8192.  00h    WORD    function
  8193.         0000h get entry points
  8194.         0001h get ???
  8195.  02h    DWORD    address of buffer for returned data
  8196. --------m-214403SF01-------------------------
  8197. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX OFF
  8198.     AX = 4403h subfn 01h
  8199.     BX = handle for device "386MAX$$"
  8200.     DS:DX -> BYTE 01h
  8201.     CX ignored
  8202. Return: DS:DX -> BYTE status (00h = successful)
  8203.     CF clear if successful
  8204.         AX destroyed
  8205.     CF set on error
  8206.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8207. Note:    this function will fail if any EMS or UMBs are in use
  8208. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=05h
  8209. --------m-214403SF02-------------------------
  8210. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX ON
  8211.     AX = 4403h subfn 02h
  8212.     BX = handle for device "386MAX$$"
  8213.     DS:DX -> BYTE 02h
  8214.     CX ignored
  8215. Return: DS:DX -> BYTE status (00h = successful)
  8216.     CF clear if successful
  8217.         AX destroyed
  8218.     CF set on error
  8219.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8220. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  8221. --------m-214403SF03-------------------------
  8222. INT 21 U - Qualitas 386MAX v6.01+ - SET STATE
  8223.     AX = 4403h subfn 03h
  8224.     BX = handle for device "386MAX$$"
  8225.     CX = number of bytes to copy (up to size of state buffer)
  8226.     DS:DX -> BYTE 03h followed by state buffer (see AX=4402h"386MAX")
  8227. Return: CF clear if successful
  8228.         AX = number of bytes actually written
  8229.     CF set on error
  8230.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8231. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  8232.       (specifying the version of the state record) and the buffer must
  8233.       contain CX bytes AFTER the initial byte
  8234. SeeAlso: AX=4402h"386MAX"
  8235. --------m-214403SF05-------------------------
  8236. INT 21 U - Qualitas 386MAX v7.00+ - LIMIT AUTOMATIC ACTIVATION TO STD EMS CALLS
  8237.     AX = 4403h subfn 05h
  8238.     BX = handle for device "386MAX$$"
  8239.     DS:DX -> BYTE 05h
  8240.     CX ignored
  8241. Return: CF clear if successful
  8242.         AX destroyed
  8243.     CF set on error
  8244.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8245. Desc:    specifies that 386MAX will only shift from AUTO to ON mode on standard
  8246.       EMS calls INT 67/AH=40h-5Dh
  8247. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=06h
  8248. --------m-214403SF06-------------------------
  8249. INT 21 U - Qualitas 386MAX v7.00+ - ALLOW AUTOMATIC ACTIVATION ON ANY INT 67
  8250.     AX = 4403h subfn 06h
  8251.     BX = handle for device "386MAX$$"
  8252.     DS:DX -> BYTE 06h
  8253.     CX ignored
  8254. Return: CF clear if successful
  8255.         AX destroyed
  8256.     CF set on error
  8257.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8258. Desc:    specified that 386MAX should shift from AUTO to ON mode on any INT 67
  8259.       call other than INT 67/AH=3Fh
  8260. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  8261. --------n-214403-----------------------------
  8262. INT 21 U - PenDOS PENDEV.SYS - ???
  8263.     AX = 4403h
  8264.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  8265.     CX = size of buffer
  8266.     DS:DX -> buffer containing ???
  8267. Return: CF clear if successful
  8268.         buffer filled
  8269.     CF set on error
  8270.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8271. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  8272.       which provides pen capability to keyboard-based programs, is bundled
  8273.       with IBM DOS 6.1
  8274. Note:    this call sets the WORD at offset 1Ah into the device driver request
  8275.       header used to call the driver to 0000h.
  8276. SeeAlso: AX=4402h"PENDEV.SYS"
  8277. --------D-214404-----------------------------
  8278. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  8279.     AX = 4404h
  8280.     BL = drive number (00h = default, 01h = A:, etc.)
  8281.     CX = number of bytes to read
  8282.     DS:DX -> buffer
  8283. Return: CF clear if successful
  8284.         AX = number of bytes actually read
  8285.     CF set on error
  8286.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8287. Note:    format of data is driver-specific
  8288. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  8289. --------d-214404-----------------------------
  8290. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  8291.     AX = 4404h
  8292.     BL = drive number (00h = default, 01h = A:, etc.)
  8293.     CX = 0004h
  8294.     DS:DX -> DWORD buffer to receive device driver address
  8295. Note:    In addition to returning the address of the Stacker device driver,
  8296.       this call also sets the volume number at offset 3Eh in the device
  8297.       driver (see INT 25/AX=CDCDh)
  8298. SeeAlso: INT 25/AX=CDCDh
  8299. --------d-214404-----------------------------
  8300. INT 21 - Stacker - GET STACVOL FILE SECTORS
  8301.     AX = 4404h
  8302.     BL = drive number (0 is current drive)
  8303.     CX = byte count (i.e., 200h = 1 sector)
  8304.     DS:DX -> buffer (see below)
  8305. Return: Data Buffer contains the number of sectors requested from the
  8306.       STACVOL physical file for the drive specified.
  8307.  
  8308. Format of stacker buffer:
  8309. Offset    Size    Description
  8310.  00h    WORD    01CDh
  8311.  02h    WORD    sector count
  8312.  04h    DWORD    number of starting sector
  8313.  08h    DWORD    far pointer to Data Buffer
  8314. --------d-214404-----------------------------
  8315. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  8316.     AX = 4404h
  8317.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  8318.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  8319.     DS:DX -> data record (see below)
  8320. Return: CF clear if successful
  8321.         AX = number of bytes read
  8322.     CF set on error
  8323.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8324. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  8325.       expander by Vertisoft Systems, Inc.
  8326. Note:    the installation check consists of scanning memory for the signature
  8327.       "FAT 2.6  byte:", which is immediately followed by a data table
  8328. SeeAlso: AX=440Dh
  8329. Index:    installation check;DUBLDISK.SYS
  8330.  
  8331. Format of data record:
  8332. Offset    Size    Description
  8333.  00h    WORD    (call) signature 4444h
  8334.  02h    BYTE    (call) function
  8335.             00h ???
  8336.             01h ???
  8337. ---function 00h---
  8338.  02h    BYTE    (return) ???
  8339.  03h    BYTE    (return) ???
  8340. ---function 01h---
  8341.  02h    WORD    (return) 4444h
  8342.  04h    WORD    allocation unit size???
  8343.  06h    WORD    ???
  8344.  08h    WORD    ???
  8345.  0Ah    BYTE    ???
  8346.  
  8347. Format of signature data table:
  8348. Offset    Size    Description
  8349.  00h  5 BYTEs    ???
  8350.  05h    BYTE    first drive number
  8351.  06h    BYTE    number of drives
  8352.  07h    ???
  8353. --------d-214404-----------------------------
  8354. INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  8355.     AX = 4404h
  8356.     BL = drive number (00h = default, 01h = A:, etc)
  8357.     CX = 000Ah (size of DSPACKET structure)
  8358.     DS:DX -> DSPACKET structure (see below)
  8359. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8360.         AX = number of bytes actually transferred
  8361.     CF set on error
  8362.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8363. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8364.  
  8365. Format of DSPACKET structure:
  8366. Offset    Size    Description
  8367.  00h    WORD    signature 444Dh ("DM")
  8368.  02h    BYTE    command code
  8369.         46h ('F') flush internal caches
  8370.         49h ('I') flush and invalidate internal caches
  8371.  03h    WORD    result code
  8372.         (return) 4F4Bh ("OK") if successful, else unchanged
  8373.  05h  5 BYTEs    padding
  8374. --------d-214404-----------------------------
  8375. INT 21 - DBLSPACE.BIN 6.2 - IOCTL - GET ??? FOR SPECIFIED DRIVE
  8376.     AX = 4404h
  8377.     BL = drive number (00h = default, 01h = A:, etc)
  8378.     CX = size of DSPACKET structure (ignored in DOS 6.2)
  8379.     DS:DX -> DSPACKET structure (see below)
  8380. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8381.         AX = number of bytes actually transferred
  8382.     CF set on error
  8383.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8384. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8385.  
  8386. Format of DSPACKET structure:
  8387. Offset    Size    Description
  8388.  00h    WORD    signature 444Dh ("DM")
  8389.  02h    BYTE    command code
  8390.         53h ('S') get ??? for specified drive
  8391.  03h    WORD    result code
  8392.         (return) 4F4Bh ("OK") if successful, else unchanged
  8393.  05h    DWORD    (return) pointer to 96-byte ??? data
  8394.  09h    DWORD    (return) pointer to ??? data
  8395.  0Dh  3 BYTEs    reserved
  8396. --------d-214404-----------------------------
  8397. INT 21 U - xDISK v3.31 - CONFIGURE
  8398.     AX = 4404h
  8399.     BL = drive number (00h = default, 01h = A:, etc)
  8400.     CX = 0047h (length of version string)
  8401.     DS:DX -> 79-byte buffer for version string and ???
  8402.     DS:0081h = commandline containing new switches for driver
  8403. Return: CF clear if successful
  8404.         AX = number of bytes actually transferred
  8405.     CF set on error
  8406.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8407. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  8408. SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  8409. --------c-214404-----------------------------
  8410. INT 21 - COMBI-disk v1.13 - GET DATA RECORD
  8411.     AX = 4404h
  8412.     BL = drive number (00h = default, 01h = A:, etc)
  8413.     CX =  (length of data packet)
  8414.     DS:DX -> buffer for data packet (see below)
  8415. Return: CF clear if successful
  8416.         AX = number of bytes actually transferred
  8417.     CF set on error
  8418.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8419. Program: COMBI-disk is a shareware combination cache and RAMdisk sharing a
  8420.       single pool of memory by Vadim V. Vlasov
  8421. Note:    the installation check consists of scanning the valid drives for one
  8422.       which returns a correctly-sized data packet with the proper
  8423.       signature in the first field
  8424. SeeAlso: AX=4405h"COMBI"
  8425. Index:    installation check;COMBI-disk
  8426.  
  8427. Format of data packet:
  8428. Offset    Size    Description
  8429.  00h  6 BYTEs    ASCIZ signature "COMBI"
  8430.  06h    WORD    version (high byte = major, low = decimal minor version)
  8431.  08h    BYTE    current options (see below)
  8432.  09h    BYTE    sectors per allocation block
  8433.  0Ah    WORD    maximum buffer in KB
  8434.  0Ch    WORD    current buffer in KB (less than max if XMS memory being lent)
  8435.  0Eh    WORD    total number of allocation blocks
  8436.  10h    WORD    current number of allocation blocks
  8437.  12h    WORD    number of blocks being used by RAM disk
  8438.  14h    WORD    number of blocks being used by cache or unused
  8439.  16h    WORD    number of dirty cache blocks
  8440.  18h    WORD    number of blocks which could not be written out due to errors
  8441.  1Ah    WORD    total number of read requests
  8442.  1Ch    WORD    total number of sectors read
  8443.  1Eh    WORD    number of BIOS read requests (cache misses)
  8444.  20h    WORD    number of sectors read via BIOS (cache misses)
  8445.  22h    WORD    total number of write requests
  8446.  24h    WORD    total number of sectors written
  8447.  26h    WORD    number of BIOS write requests
  8448.  28h    WORD    number of sectors written via BIOS
  8449.  2Ah    WORD    number of RAM disk read requests
  8450.  2Ch    WORD    number of sectors read from RAM disk
  8451.  2Eh    WORD    number of RAM disk write requests
  8452.  30h    WORD    number of sectors written to RAM disk
  8453. --------D-214405-----------------------------
  8454. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  8455.     AX = 4405h
  8456.     BL = drive number (00h = default, 01h = A:, etc)
  8457.     CX = number of bytes to write
  8458.     DS:DX -> data to write
  8459. Return: CF clear if successful
  8460.         AX = number of bytes actually written
  8461.     CF set on error
  8462.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8463. Note:    format of data is driver-specific
  8464. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  8465. --------d-214405-----------------------------
  8466. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  8467.     AX = 4405h
  8468.     BX = drive number (00h = default, 01h = A:, etc)
  8469.     CX = number of bytes to write
  8470.     DS:DX -> SCSIDISK control block (see AX=4403h"ST-01")
  8471. Return: CF clear if successful
  8472.         AX = number of bytes actually written
  8473.     CF set on error
  8474.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8475. SeeAlso: AX=4403h"ST-01"
  8476. --------d-214405-----------------------------
  8477. INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  8478.     AX = 4405h
  8479.     BL = drive number (00h = default, 01h = A:, etc)
  8480.     CX = 000Ah (size of DSPACKET structure)
  8481.     DS:DX -> DSPACKET structure (see below)
  8482. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8483.         AX = number of bytes actually transferred
  8484.     CF set on error
  8485.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8486. Note:    this call is identical to the documented AX=4404h
  8487. SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8488.  
  8489. Format of DSPACKET structure:
  8490. Offset    Size    Description
  8491.  00h    WORD    signature 444Dh ("DM")
  8492.  02h    BYTE    command code
  8493.         46h ('F') flush internal caches
  8494.         49h ('I') flush and invalidate internal caches
  8495.  03h    WORD    result code
  8496.         (return) 4F4Bh ("OK") if successful, else unchanged
  8497.  05h  5 BYTEs    padding
  8498. --------d-214405-----------------------------
  8499. INT 21 U - xDISK v3.31 - ???
  8500.     AX = 4405h
  8501.     BL = drive number (00h = default, 01h = A:, etc)
  8502.     CX = number of bytes to write
  8503.     DS:DX -> buffer containing version string
  8504.     ???
  8505. Return: CF clear if successful
  8506.         AX = number of bytes actually transferred
  8507.     CF set on error
  8508.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8509. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  8510. SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  8511. --------d-214405-----------------------------
  8512. INT 21 - COMBI-disk v1.13 - CONTROL COMBI-disk
  8513.     AX = 4405h
  8514.     BL = drive number (00h = default, 01h = A:, etc) for RAM disk
  8515.     CX = number of bytes to write
  8516.     DS:DX -> buffer containing command packet (see below)
  8517. Return: CF clear if successful
  8518.         AX = number of bytes actually transferred
  8519.     CF set on error
  8520.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8521. SeeAlso: AX=4404h"COMBI"
  8522.  
  8523. Format of command packet:
  8524. Offset    Size    Description
  8525.  00h    WORD    version
  8526.  02h    BYTE    command code
  8527.         80h flush cache
  8528.         81h change options byte
  8529.         82h shrink memory
  8530.         83h expand memory
  8531.         84h get dirty block information
  8532.         85h reset write errors
  8533.         86h reset counters
  8534. ---command code 81h---
  8535.  03h    BYTE    new options byte (see below)
  8536. ---command code 82h---
  8537.  03h    WORD    number of KB to release
  8538. ---command code 83h---
  8539.  03h    WORD    number of KB to expand
  8540. ---command code 84h---
  8541.  03h    DWORD    -> buffer for block info (see below)
  8542. ---command code 85h---
  8543.  03h    DWORD    block ID
  8544. ---command code 86h---
  8545.  03h    BYTE    which counters to reset
  8546.         bit 0: hard disk read counts
  8547.         bit 1: hard disk write counts
  8548.         bit 2: RAM disk read/write counts
  8549. Note:    multiple commands may be placed in a single packet by stringing
  8550.       together as many command/argument pairs as desired
  8551.  
  8552. Bitfields for options byte:
  8553. Bit(s)    Description
  8554.  0    cache off
  8555.  1    cache frozen
  8556.  2    write caching enabled
  8557.  3    delayed writing disabled
  8558.  5    fix memory allocation (no XMS lending)
  8559.  6    no 'sector not found' error
  8560.  
  8561. Format of block info:
  8562. Offset    Size    Description
  8563.  00h    DWORD    block ID
  8564.  04h    BYTE    bitmask of valid sectors in block
  8565.  05h    BYTE    bitmask of dirty sectors in block
  8566.  06h    BYTE    last error returned by BIOS
  8567.  07h    BYTE    number of errors
  8568. --------D-214406-----------------------------
  8569. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  8570.     AX = 4406h
  8571.     BX = file handle
  8572. Return: CF clear if successful
  8573.         AL = input status
  8574.         00h not ready (device) or at EOF (file)
  8575.         FFh ready
  8576.     CF set on error
  8577.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8578. Note:    files may not register as being at EOF if positioned there by AH=42h
  8579. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  8580. --------D-214407-----------------------------
  8581. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  8582.     AX = 4407h
  8583.     BX = file handle
  8584. Return: CF clear if successful
  8585.         AL = input status
  8586.         00h not ready
  8587.         FFh ready
  8588.     CF set on error
  8589.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  8590. Note:    for DOS 2+, files are always ready for output, even if the disk is
  8591.       full or no media is in the drive
  8592. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  8593. --------D-214408-----------------------------
  8594. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  8595.     AX = 4408h
  8596.     BL = drive number (00h = default, 01h = A:, etc)
  8597. Return: CF clear if successful
  8598.         AX = 0000h if removable
  8599.            = 0001h if fixed
  8600.     CF set on error
  8601.         AX = error code (01h,0Fh) (see AH=59h)
  8602. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  8603. --------D-214409-----------------------------
  8604. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  8605.     AX = 4409h
  8606.     BL = drive number (00h = default, 01h = A:, etc)
  8607. Return: CF clear if successful
  8608.         DX = device attribute word
  8609.         bit 15: drive is SUBSTituted
  8610.         bit 12: drive is remote
  8611.         bit  9: direct I/O not allowed
  8612.     CF set on error
  8613.         AX = error code (01h,0Fh) (see AH=59h)
  8614. Note:    on local drives, DX bits not listed above are the attribute word from
  8615.       the device driver header (see AH=52h); for remote drives, the other
  8616.       bits appear to be undefined for DOS versions prior to 5.0 (they are
  8617.       all cleared in DOS 5+)
  8618. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  8619. --------D-21440A-----------------------------
  8620. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  8621.     AX = 440Ah
  8622.     BX = handle
  8623. Return: CF clear if successful
  8624.         DX = attribute word (as stored in SFT)
  8625.         bit 15: set if remote
  8626.         bit 14: date/time not set on close
  8627.     CF set on error
  8628.         AX = error code (01h,06h) (see AH=59h)
  8629. Notes:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  8630.       the file server on which the handle is located in CX
  8631.     DR-DOS 3.41 and 5.0 clear all bits of DX except bit 15
  8632. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  8633. --------D-21440B-----------------------------
  8634. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  8635.     AX = 440Bh
  8636.     CX = pause between retries (default 1)
  8637.     DX = number of retries (default 3)
  8638. Return: CF clear if successful
  8639.     CF set on error
  8640.         AX = error code (01h) (see AH=59h)
  8641. Notes:    delay is dependent on processor speed (value in CX specifies number of
  8642.       64K-iteration empty loops to execute)
  8643.     if DX=0000h on entry, the retry count is left unchanged
  8644. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  8645. --------D-21440C-----------------------------
  8646. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  8647.     AX = 440Ch
  8648.     BX = device handle
  8649.     CH = category code
  8650.         00h unknown (DOS 3.3+)
  8651.         01h COMn: (DOS 3.3+)
  8652.         03h CON (DOS 3.3+)
  8653.         05h LPTn:
  8654.         9Eh Media Access Control driver (STARLITE)
  8655.         00h-7Fh reserved for Microsoft
  8656.         80h-FFh reserved for OEM/user-defined
  8657.     CL = function
  8658.         00h MAC driver Bind (STARLITE)
  8659.         45h set iteration (retry) count
  8660.         4Ah select code page
  8661.         4Ch start code-page preparation
  8662.         4Dh end code-page preparation
  8663.         5Fh set display information (DOS 4+)
  8664.         65h get iteration (retry) count
  8665.         6Ah query selected code page
  8666.         6Bh query prepare list
  8667.         7Fh get display information (DOS 4+)
  8668.     DS:DX -> parameter block (see below)
  8669.     SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  8670.     DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  8671. Return: CF set on error
  8672.         AX = error code (see AH=59h)
  8673.     CF clear if successful
  8674.         DS:DX -> iteration count if CL=65h
  8675.         SI = returned value (European MS-DOS 4.0, OS/2 comp box)
  8676.         DI = returned value (European MS-DOS 4.0, OS/2 comp box)
  8677. Notes:    bit assignments for function code in CL:
  8678.         bit 7: set to ignore if unsupported, clear to return error
  8679.         bit 6: set if passed to driver, clear if intercepted by DOS
  8680.         bit 5: set if queries data from device, clear if sends command
  8681.         bits 4-0: subfunction
  8682.     DR-DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device
  8683.       does not support a retry counter
  8684. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh
  8685. SeeAlso: INT 2F/AX=1A01h
  8686.  
  8687. Format of parameter block for function 00h:
  8688. Offset    Size    Description
  8689.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  8690.  08h    WORD    version
  8691.  0Ah    WORD    flags
  8692.         bit 0: media requires connect or listen request before use
  8693.         bit 1: network is a LAN (broadcast/multicast supported)
  8694.         bit 2: point-to-point network
  8695.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  8696.         by MAC driver)
  8697.  0Eh    WORD    context
  8698.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  8699.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  8700.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  8701.  16h    WORD    addressing format (filled in by MAC driver)
  8702.         0000h general addressing
  8703.         0001h Ethernet addressing
  8704.         0002h Token Ring addressing
  8705.         0003h Token Bus addressing
  8706.  18h    DWORD    Send entry point (filled in by MAC driver)
  8707.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  8708.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  8709.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  8710.  
  8711. Format of parameter block for function 45h:
  8712. Offset    Size    Description
  8713.  00h    WORD    number of times output is attempted before driver assumes
  8714.         device is busy
  8715.  
  8716. Format of parameter block for functions 4Ah and 6Ah:
  8717. Offset    Size    Description
  8718.  00h    WORD    length of data
  8719.  02h    WORD    code page ID
  8720.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  8721.           start/end for each of N ranges (DOS 4.0)
  8722.     WORD    0000h  end of data (DOS 4.0)
  8723.  
  8724. Format of parameter block for function 4Ch:
  8725. Offset    Size    Description
  8726.  00h    WORD    flags
  8727.         DISPLAY.SYS = 0000h
  8728.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  8729.             prepare cartridge selection
  8730.  02h    WORD    length of remainder of parameter block
  8731.  04h    WORD    number of code pages following
  8732.  06h  N WORDs    code page 1,...,N
  8733.  
  8734. Format of parameter block for function 4Dh:
  8735. Offset    Size    Description
  8736.  00h    WORD    length of data
  8737.  02h    WORD    code page ID
  8738.  
  8739. Format of parameter block for functions 5Fh and 7Fh:
  8740. Offset    Size    Description
  8741.  00h    BYTE    level (0 for DOS 4.x-6.0)
  8742.  01h    BYTE    reserved (0)
  8743.  02h    WORD    length of following data (14)
  8744.  04h    WORD    control flags
  8745.           bit 0 set for blink, clear for intensity
  8746.           bits 1 to 15 reserved
  8747.  06h    BYTE    mode type (1=text, 2=graphics)
  8748.  07h    BYTE    reserved (0)
  8749.  08h    WORD    colors
  8750.            0 = monochrome
  8751.            else N bits per pixel
  8752.  0Ah    WORD    pixel columns
  8753.  0Ch    WORD    pixel rows
  8754.  0Eh    WORD    character columns
  8755.  10h    WORD    character rows
  8756.  
  8757. Format of parameter block for function 6Bh:
  8758. Offset    Size    Description
  8759.  00h    WORD    length of following data
  8760.  02h    WORD    number of hardware code pages
  8761.  04h  N WORDs    hardware code pages 1,...,N
  8762.     WORD    number of prepared code pages
  8763.       N WORDs    prepared code pages 1,...,N
  8764. --------d-21440C-----------------------------
  8765. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  8766.     AX = 440Ch
  8767.     BX = device handle
  8768.     CH = category code
  8769.         07h tape (ASPITAPE.SYS)
  8770.     CL = function
  8771.         01h "mtop" - perform tape operation
  8772.         02h "mtget" - get tape status
  8773.         03h ignore end-of-tape errors
  8774.         04h enable end-of-tape errors
  8775.     DS:DX -> parameter block (see below)
  8776. Return: CF set on error
  8777.         AX = error code (see AH=59h)
  8778.     CF clear if successful
  8779.         DS:DX -> data block
  8780. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  8781.       SCSI Programming Interface (ASPI).  It provides the following device
  8782.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  8783.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  8784.       also be the following names 'MTx' and 'NMTx' which default to 1024
  8785.       byte blocks.    The names may also have a '$' appended to try and make
  8786.       them unique from file names of 'RMT0' etc.
  8787.     once opend these devices must be put into RAW mode
  8788. SeeAlso: AX=4402h"ASPI"
  8789.  
  8790. Format of mtop parameter block:
  8791. Offset    Size    Description
  8792.  00h    WORD    operation code
  8793.         00h "MTWEOF" - write an end-of-file record
  8794.         01h "MTFSF" - forward space file
  8795.         02h "MTBSF" - backward space file
  8796.         03h "MTFSR" - forward space record
  8797.         04h "MTBSR" - backward space record
  8798.         05h "MTREW" - rewind
  8799.         06h "MTOFFL" - rewind and unload
  8800.         07h "MTNOP" - perform TEST UNIT READY
  8801.  02h    DWORD    repetition count
  8802.  
  8803. Format of mtget parameter block:
  8804. Offset    Size    Description
  8805.  00h    BYTE    ASPI host ID
  8806.  01h    BYTE    SCSI target ID
  8807.  02h    BYTE    SCSI logical unit number
  8808.  03h    BYTE    device parameters
  8809.         bit 0: drive must use fixed-block read and write
  8810.         bit 7: drive is an ASPI device
  8811.  04h    BYTE    current device state (see below)
  8812.  05h    BYTE    unit number within driver
  8813.  06h    WORD    fixed block blocksize
  8814.  08h    BYTE    last SCSI status
  8815.  09h    BYTE    last SCSI sense key
  8816.  0Ah    WORD    last SCSI opcode (packed) (see below)
  8817.  0Ch    WORD    residual bytes from SCSI opcode
  8818.  
  8819. Bitfields for current device state:
  8820. Bit(s)    Description
  8821.  0    device currently opened in buffered mode
  8822.  1    drive currently opened in nonbuffered mode
  8823.  2    rewind drive on last close
  8824.  3    drive has been written on
  8825.  4    drive has been read from
  8826.  5    next read will return 0 bytes
  8827.  6    EOM will resemble EOF
  8828.  7    drive may be busy rewinding
  8829.  
  8830. Bitfields for SCSI opcode:
  8831. Bit(s)    Description
  8832.  0-7    SCSI operation (SCSI packet byte 0)
  8833.  8-10    SCSI flags (SCSI packet byte 1)
  8834.  11-12    ASPI "Direction Bits" (ASPI SRB byte 3)
  8835. --------D-21440D-----------------------------
  8836. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  8837.     AX = 440Dh
  8838.     BL = drive number (00h=default,01h=A:,etc)
  8839.     CH = category code
  8840.         08h disk drive
  8841.         00h-7Fh reserved for Microsoft
  8842.         80h-FFh reserved for OEM/user-defined
  8843.     CL = minor code (function) (see below)
  8844.     DS:DX -> (DOS) parameter block (see below)
  8845.     SI:DI -> (OS/2 comp box) parameter block (see below)
  8846. Return: CF set on error
  8847.         AX = error code (01h,02h) (see AH=59h)
  8848.     CF clear if successful
  8849.         DS:DX -> data block if CL=60h or CL=61h
  8850. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  8851.       entries in the BPB for diskettes.
  8852.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5+
  8853.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  8854.     DR-DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all
  8855.       other minor codes return error code 16h
  8856.     some PCMCIA calls reportedly appear to be dangerous for MS-DOS versions
  8857.       prior to 5.0
  8858. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  8859.  
  8860. Values for minor code:
  8861.  00h    (OS/2)    \ used to lock/unlock a drive
  8862.  01h    (OS/2)    /
  8863.  40h    set device parameters
  8864.  41h    write logical device track
  8865.  42h    format and verify logical device track
  8866.  46h    (DOS 4+) set volume serial number (see also AH=69h)
  8867.  47h    (DOS 4+) set access flag
  8868.  50h    (PCMCIA) attribute memory write
  8869.  51h    (PCMCIA) common memory write
  8870.  52h    (PCMCIA) force media change (DOS 5+ ???)
  8871.  53h    (PCMCIA) erase drive
  8872.  54h    (PCMCIA) erase media
  8873.  56h    (PCMCIA) set erase status callback
  8874.  57h    (PCMCIA) append Card Information Structure (CIS) tuple
  8875.  58h    (PCMCIA) erase CIS tuples
  8876.  60h    get device parameters
  8877.  61h    read logical device track
  8878.  62h    verify logical device track
  8879.  66h    (DOS 4+) get volume serial number (see also AH=69h)
  8880.  67h    (DOS 4+) get access flag
  8881.  68h    (DOS 5+) sense media type
  8882.  70h    (PCMCIA) attribute memory read
  8883.  73h    (PCMCIA) get memory media information (DOS 5+ ???)
  8884.  76h    (PCMCIA) get erase status callback
  8885.  77h    (PCMCIA) get first Card Information Structure (CIS) tuple
  8886.  78h    (PCMCIA) get next CIS tuple
  8887.  
  8888. Format of parameter block for functions 40h, 60h:
  8889. Offset    Size    Description
  8890.  00h    BYTE    special functions
  8891.         bit 0 set if function to use current BPB, clear if Device
  8892.             BIOS Parameter Block field contains new default BPB
  8893.         bit 1 set if function to use track layout fields only
  8894.             must be clear if CL=60h
  8895.         bit 2 set if all sectors in track same size (should be set)
  8896.         bits 3-7 reserved
  8897.  01h    BYTE    device type (see below)
  8898.  02h    WORD    device attributes
  8899.         bit 0 set if nonremovable medium
  8900.         bit 1 set if door lock ("changeline") supported
  8901.         bits 2-15 reserved
  8902.  04h    WORD    number of cylinders
  8903.  06h    BYTE    media type
  8904.         for 1.2M drive
  8905.             00h 1.2M disk (default)
  8906.             01h 320K/360K disk
  8907.         F8h for DUBLDISK.SYS v2.6 expanded drives
  8908.         always 00h for other drive types
  8909.  07h 31 BYTEs    device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
  8910. ---function 40h only---
  8911.  26h    WORD    number of sectors per track (start of track layout field)
  8912.         max 63
  8913.  28h  N word pairs: number,size of each sector in track
  8914.  
  8915. Values for device type:
  8916.  00h    320K/360K disk
  8917.  01h    1.2M disk
  8918.  02h    720K disk
  8919.  03h    single-density 8-inch disk
  8920.  04h    double-density 8-inch disk
  8921.  05h    fixed disk
  8922.  06h    tape drive
  8923.  07h    (DOS 3.3+) other type of block device, normally 1.44M floppy
  8924.  08h    read/write optical disk
  8925.  09h    (DOS 5+) 2.88M floppy
  8926.  
  8927. Format of parameter block for functions 41h, 61h:
  8928. Offset    Size    Description
  8929.  00h    BYTE    special functions (reserved, must be zero)
  8930.  01h    WORD    number of disk head
  8931.  03h    WORD    number of disk cylinder
  8932.  05h    WORD    number of first sector to read/write
  8933.  07h    WORD    number of sectors
  8934.  09h    DWORD    transfer address
  8935.  
  8936. Format of parameter block for function 42h:
  8937. Offset    Size    Description
  8938.  00h    BYTE    reserved, must be zero (DOS <3.2)
  8939.           bit 0=0: format/verify track
  8940.             1: format status call (DOS 3.2+), don't actually format
  8941.           bits 1-7 reserved, must be zero
  8942.         value on return (DOS 3.3+):
  8943.           00h    specified tracks, sectors/track supported by BIOS
  8944.           01h    function not supported by BIOS
  8945.           02h    specified tracks, sectors/track not allowed for drive
  8946.           03h    no disk in drive
  8947.  01h    WORD    number of disk head
  8948.  03h    WORD    number of disk cylinder
  8949.  
  8950. Format of parameter block for function 62h:
  8951. Offset    Size    Description
  8952.  00h    BYTE    reserved, must be zero (DOS <3.2)
  8953.           bit 0=0: verify single track
  8954.             1: verify multiple tracks
  8955.           bits 1-7 reserved, must be zero
  8956.         value on return (DOS 3.3+):
  8957.           00h    specified tracks, sectors/track supported by BIOS
  8958.           01h    function not supported by BIOS
  8959.           02h    specified tracks, sectors/track not allowed for drive
  8960.           03h    no disk in drive
  8961.  01h    WORD    number of disk head
  8962.  03h    WORD    number of disk cylinder
  8963.  05h    WORD    number of tracks to verify (equivalent to 255 or fewer sectors)
  8964.  
  8965. Format of parameter block for functions 46h, 66h:
  8966. Offset    Size    Description
  8967.  00h    WORD    (call) info level (should be 0000h)
  8968.  02h    DWORD    disk serial number (binary)
  8969.  06h 11 BYTEs    volume label or "NO NAME    "
  8970.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  8971.  
  8972. Format of parameter block for functions 47h, 67h:
  8973. Offset    Size    Description
  8974.  00h    BYTE    special-function field (must be zero)
  8975.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  8976.  
  8977. Format of parameter block for function 52h:
  8978.  00h    BYTE    (call) unused???
  8979.         (return) 00h if flast/ATA drive but no card inserted
  8980.             unchanged otherwise
  8981. Notes:    the absense of a flash card should be tested by checking the DOS error
  8982.       code rather than the returned byte
  8983.     the parameter byte is cleared to 00h erroneously by the Award
  8984.       PCDISK.EXE v1.02c PCMCIA/ATA driver if no ATA card is inserted
  8985.  
  8986. Format of parameter block for function 68h:
  8987. Offset    Size    Description
  8988.  00h    BYTE    01h for default media type, 00h for any other media type
  8989.         (see also INT 13/AH=20h)
  8990.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  8991.  
  8992. Format of parameter block for function 73h:
  8993. Offset    Size    Description
  8994.  00h    BYTE    ???
  8995.         00h ATA card inserted ???
  8996.         80h ATA card not inserted ???
  8997.  01h    BYTE    length of parameter block ???
  8998.         apparently always 40h
  8999.  02h    BYTE    ???
  9000.         00h ATA card not inserted ???
  9001.         0Dh ATA card inserted ???
  9002.  03h  2 BYTEs    ??? (apparently always 00h)
  9003.  05h    BYTE    drive number (0=first) ???
  9004.  06h    BYTE    total number of drives ???
  9005.  07h    BYTE    ???
  9006.         00h ATA card not inserted ???
  9007.         01h ATA card inserted ???
  9008.  08h 17 BYTEs    ???
  9009.  19h    BYTE    ???
  9010.         00h ATA card not inserted ???
  9011.         01h ATA card inserted ???
  9012.  1Ah    BYTE    ??? (apparently always 01h)
  9013.  1Bh    BYTE    ???
  9014.         00h ATA card not inserted ???
  9015.         01h ATA card inserted ???
  9016.  1Ch  2 BYTEs    ??? (apparently always 0015h)
  9017.  1Eh  2 BYTEs    ???
  9018.  20h  2 BYTEs    ??? (apparently always 0110h)
  9019.  22h 15 BYTEs    ???
  9020.  31h  2 BYTEs    ??? (apparently always 7000h)
  9021.  33h 11 BYTEs    driver signature
  9022.         "AWARD PDISK" for Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  9023.  3Eh  2 BYTEs    ???
  9024. --------D-21440E-----------------------------
  9025. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  9026.     AX = 440Eh
  9027.     BL = drive number (00h=default,01h=A:,etc)
  9028. Return: CF set on error
  9029.         AX = error code (01h,0Fh) (see AH=59h)
  9030.     CF clear if successful
  9031.         AL = 00h block device has only one logical drive assigned
  9032.          1..26 the last letter used to reference the drive (1=A:,etc)
  9033. Note:    DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  9034.       always returns AL=00h
  9035. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  9036. --------D-21440F-----------------------------
  9037. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  9038.     AX = 440Fh
  9039.     BL = physical drive number (00h=default,01h=A:,etc))
  9040. Return: CF set on error
  9041.         AX = error code (01h,0Fh) (see AH=59h)
  9042.     CF clear if successful
  9043.         drive now responds to next logical drive number
  9044. Notes:    maps logical drives to physical drives, similar to DOS's treatment of
  9045.       a single physical floppy drive as both A: and B:
  9046.     DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  9047.       always returns an error on this function
  9048. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  9049. --------D-214410-----------------------------
  9050. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  9051.     AX = 4410h
  9052.     BX = handle for device
  9053.     CH = category code (see AX=440Ch)
  9054.     CL = function code
  9055. Return: CF clear if successful
  9056.         AX = 0000h    specified IOCTL function is supported
  9057.     CF set on error
  9058.         AL = 01h    IOCTL capability not available
  9059. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  9060.       standard DOS 3.2 set may use this call first to see whether a
  9061.       particular call is supported
  9062. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  9063. --------d-214410BXFFFF-----------------------
  9064. INT 21 U - NewSpace - ENABLE DRIVER
  9065.     AX = 4410h
  9066.     BX = FFFFh
  9067. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  9068.       all files as they are written and decompresses them as they are read
  9069. Note:    compressed files are not accessible unless the driver is enabled
  9070. SeeAlso: AX=4411h/BX=FFFFh
  9071. --------D-214411-----------------------------
  9072. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  9073.     AX = 4411h
  9074.     BL = drive number
  9075.     CH = category code (see AX=440Dh)
  9076.     CL = function code
  9077. Return: CF clear if successful
  9078.         AX = 0000h    specified IOCTL function is supported
  9079.     CF set on error
  9080.         AL = 01h    IOCTL capability not available
  9081. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  9082.       standard DOS 3.2 set may use this call first to see whether a
  9083.       particular call is supported
  9084. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  9085. --------d-214411BXFFFF-----------------------
  9086. INT 21 U - NewSpace - DISABLE DRIVER
  9087.     AX = 4411h
  9088.     BX = FFFFh
  9089. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  9090.       all files as they are written and decompresses them as they are read
  9091. Note:    compressed files are not accessible unless the driver is enabled
  9092. SeeAlso: AX=4410h/BX=FFFFh
  9093. --------O-214412-----------------------------
  9094. INT 21 O - DR-DOS 5.0-6.0 - DETERMINE DOS TYPE
  9095.     AX = 4412h
  9096.     CF set
  9097. Return: CF set if not DR-DOS
  9098.         AX = error code (see AH=59h)
  9099.     CF clear if DR-DOS
  9100.         DX = AX = version code (see AX=4452h)
  9101. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  9102.       identical to AX=4452h
  9103. SeeAlso: AX=4452h
  9104. --------d-214412BXFFFF-----------------------
  9105. INT 21 U - NewSpace - INSTALLATION CHECK???
  9106.     AX = 4412h
  9107.     BX = FFFFh
  9108. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  9109.     BX:DX -> ???
  9110.     CX = ???
  9111. SeeAlso: AX=4411h/BX=FFFFh
  9112. --------d-214413BXFFFF-----------------------
  9113. INT 21 U - NewSpace - GET ???
  9114.     AX = 4413h
  9115.     BX = FFFFh
  9116. Return: AX = code segment of NewRes (resident driver for NewSpace)
  9117.     BX = offset of ???
  9118. SeeAlso: AX=4412h/BX=FFFFh
  9119. --------O-214414-----------------------------
  9120. INT 21 OU - DR-DOS 5.0-6.0 - SET GLOBAL PASSWORD
  9121.     AX = 4414h
  9122.     DS:DX -> password string (blank-padded to 8 characters)
  9123. Desc:    Specify the master password for accessing files.
  9124. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  9125.       identical to AX=4454h
  9126. SeeAlso: AX=4454h
  9127. --------d-214414BXFFFF-----------------------
  9128. INT 21 U - NewSpace - DEBUGGING DUMP
  9129.     AX = 4414h
  9130.     BX = FFFFh
  9131. Return: debugging dump written to X:\NEWSPACE.SMP
  9132. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  9133. --------O-2144-------------------------------
  9134. INT 21 OU - DR-DOS 5.0-6.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  9135.     AH = 44h
  9136.     AL = 16h to 18h
  9137. Note:    these obsolete subfunctions (which are no longer supported in Novell
  9138.       DOS 7) are identical to AX=4456h through 4458h
  9139. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  9140. --------O-214451-----------------------------
  9141. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  9142.     AX = 4451h
  9143. Return: CF set if not Concurrent DOS
  9144.         AX = error code (see AH=59h)
  9145.     CF clear if successful
  9146.         AH = single-user/multiuser nature
  9147.         10h single-user
  9148.             AL = operating system version ID (see AX=4452h)
  9149.         14h multiuser
  9150.             AL = operating system version ID (see below)
  9151. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  9152.       in the environment variable VER
  9153.     use this function if you are looking for multiuser capabilities,
  9154.       AX=4452h for single-user
  9155.     this function should never return the single-user values
  9156. SeeAlso: AX=4452h,AX=4459h
  9157.  
  9158. Values for operating system version ID:
  9159.  32h    Concurrent PC DOS 3.2
  9160.  41h    Concurrent DOS 4.1
  9161.  50h    Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  9162.  60h    Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  9163.  62h    Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  9164.  66h    DR Multiuser DOS 5.1
  9165.  67h    Concurrent DOS 5.1
  9166. --------O-214452-----------------------------
  9167. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  9168.     AX = 4452h ("DR")
  9169.     CF set
  9170. Return: CF set if not DR-DOS
  9171.         AX = error code (see AH=59h)
  9172.     CF clear if DR-DOS
  9173.         AX = version code
  9174.         AH = single-user/multiuser nature
  9175.         10h single-user
  9176.             AL = operating system version ID (see below)
  9177.         14h multiuser
  9178.             AL = operating system version ID (see AX=4451h)
  9179.         DX modified (see note)
  9180. Notes:    the DR-DOS version is stored in the environment variable VER
  9181.     use this function if looking for single-user capabilities, AX=4451h
  9182.       if looking for multiuser; this call should never return multiuser
  9183.       values
  9184.     in DR-DOS 3.41-6.0, DX=AX on return; for Novell DOS 7, DH=AH but DL=00h
  9185.     Novell DOS 7 returns error code 0001h if SETVER 255.x is in effect for
  9186.       the calling program
  9187. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  9188.  
  9189. Values for operating system version ID:
  9190.  60h    DOS Plus
  9191.  63h    DR-DOS 3.41
  9192.  64h    DR-DOS 3.42
  9193.  65h    DR-DOS 5.00
  9194.  67h    DR-DOS 6.00
  9195.  70h    PalmDOS
  9196.  71h    DR-DOS 6.0 March 1993 "business update"
  9197.  72h    Novell DOS 7.0
  9198. --------O-214454-----------------------------
  9199. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  9200.     AX = 4454h
  9201.     DS:DX -> password string (blank-padded to 8 characters)
  9202. Desc:    Specify the master password for accessing files.
  9203. SeeAlso: AX=4303h,AX=4414h
  9204. --------O-214456-----------------------------
  9205. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  9206.     AX = 4456h
  9207.     DL = new state
  9208.         00h set to application
  9209.         01h COMMAND.COM history buffers
  9210. Return: AL/AX = previous value of ??? flags (bit 7 is the history buffer bit)
  9211. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0; DR-DOS 6.0 only
  9212.       checks bit 0 and ignores the rest of DL
  9213. --------O-214456DL02-------------------------
  9214. INT 21 U - Novell DOS 7 - ???
  9215.     AX = 4456h
  9216.     DL = 02h
  9217. Return: AX = previous value of ??? (bit 0 may be toggled by this call)
  9218. SeeAlso: AX=4456h/DL=04h
  9219. --------O-214456DL04-------------------------
  9220. INT 21 U - Novell DOS 7 - TOGGLE ??? FLAG
  9221.     AX = 4456h
  9222.     DL = 04h
  9223. Return: AX = previous value of ??? (bit 1 is the toggled flag)
  9224. SeeAlso: AX=4456h/DL=02h
  9225. --------O-214457-----------------------------
  9226. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  9227.     AX = 4457h
  9228.     DH = subfunction
  9229.         00h enable/disable SHARE
  9230.         DL = 00h disable
  9231.            = 01h enable
  9232.            else Return: AX = ???
  9233.         01h get HILOAD status
  9234.         Return: AX = status
  9235.                 0000h off
  9236.                 0001h on
  9237.         02h set HILOAD status
  9238.         DL = new state (00h off, 01h on)
  9239.         Return: AX = ???
  9240.         other
  9241.         Return: AX = ???
  9242. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0; it does not seem
  9243.       to be supported by Novell DOS 7
  9244. SeeAlso: AX=4457h/DX=FFFFh
  9245. --------O-214457DXFFFF-----------------------
  9246. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  9247.     AX = 4457h
  9248.     DX = FFFFh
  9249. Return: AX = SHARE status
  9250. SeeAlso: INT 2F/AX=1000h
  9251. --------O-214458-----------------------------
  9252. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE
  9253.     AX = 4458h
  9254. Return: ES:BX -> internal variable table (see below)
  9255.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0, 0FE4h for
  9256.         Novell DOS 7)
  9257. SeeAlso: AX=4452h
  9258.  
  9259. Format of DR-DOS 5.0-6.0 internal variable table:
  9260. Offset    Size    Description
  9261.  00h    WORD    ???
  9262.  02h    WORD    segment of ???
  9263.  04h  7 BYTEs    ???
  9264.  0Bh    WORD    KB of extended memory at startup
  9265.  0Dh    BYTE    number of far jump entry points
  9266.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see below)
  9267.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  9268.         memory block (see below) or 0000h if none; segment is FFFFh
  9269.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  9270.         or 0000h if already used
  9271. ---DR-DOS 6.0---
  9272.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  9273.         memory block (see below) or 0000h if none; segment is FFFFh
  9274. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  9275.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  9276.       called from CONFIG.SYS. The word is set to zero later when the area
  9277.       is copied to the COMMAND.COM environment space.  This allows
  9278.       CONFIG.SYS to pass information to AUTOEXEC.BAT.
  9279.  
  9280. Format of Novell DOS 7 internal variable table:
  9281. Offset    Size    Description
  9282.  00h    ???
  9283.  1Eh    WORD    offset of COUNTRY.SYS filename
  9284.  42h 16 DWORDs    pointers to ??? entry points
  9285.     ???
  9286.  
  9287. Format of kernel entry jump table for DR-DOS 5.0-6.0:
  9288. Offset    Size    Description
  9289.  00h  5 BYTEs    far jump to kernel entry point for CP/M CALL 5
  9290.  05h  5 BYTEs    far jump to kernel entry point for INT 20
  9291.  0Ah  5 BYTEs    far jump to kernel entry point for INT 21
  9292.  0Fh  5 BYTEs    far jump to kernel entry point for INT 22 (RETF)
  9293.  14h  5 BYTEs    far jump to kernel entry point for INT 23 (RETF)
  9294.  19h  5 BYTEs    far jump to kernel entry point for INT 24
  9295.  1Eh  5 BYTEs    far jump to kernel entry point for INT 25
  9296.  23h  5 BYTEs    far jump to kernel entry point for INT 26
  9297.  28h  5 BYTEs    far jump to kernel entry point for INT 27
  9298.  2Dh  5 BYTEs    far jump to kernel entry point for INT 28
  9299.  32h  5 BYTEs    far jump to kernel entry point for INT 2A (IRET)
  9300.  37h  5 BYTEs    far jump to kernel entry point for INT 2B (IRET)
  9301.  3Ch  5 BYTEs    far jump to kernel entry point for INT 2C (IRET)
  9302.  41h  5 BYTEs    far jump to kernel entry point for INT 2D (IRET)
  9303.  46h  5 BYTEs    far jump to kernel entry point for INT 2E (IRET)
  9304.  4Bh  5 BYTEs    far jump to kernel entry point for INT 2F
  9305. Notes:    all of these entry points are indirected through this jump table
  9306.       to allow the kernel to be relocated into high memory while leaving
  9307.       the actual entry addresses in low memory for maximum compatibility
  9308.     some of these entry points (22h,23h,24h,2Eh,2Fh) are replaced as soon
  9309.       as COMMAND.COM is loaded, and return immediately to the caller, some
  9310.       returning an error code (the original handler for INT 2F returns
  9311.       AL=03h [fail]).
  9312.  
  9313. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  9314. Offset    Size    Description
  9315.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  9316.  02h    WORD    size of this block in bytes (at least 10h)
  9317.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  9318.         00h system
  9319.         01h KEYB
  9320.         02h NLSFUNC
  9321.         03h SHARE
  9322.         04h TaskMAX
  9323.         05h COMMAND
  9324.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  9325.           hooks interrupts using segment FFFEh instead FFFFh.
  9326. --------O-214459-----------------------------
  9327. INT 21 - DR MultiUser DOS 5.0 - API
  9328.     AX = 4459h
  9329.     CL = function (see INT E0"CP/M")
  9330.     DS,DX = parameters
  9331. Notes:    DR-DOS 5.0 and Novell DOS 7 return CF set and AX=0001h
  9332.     this API is also available on INT E0
  9333. SeeAlso: AX=4452h,INT E0"CP/M"
  9334. --------N-2144E0-----------------------------
  9335. INT 21 U - Sun PC-NFS - API???
  9336.     AX = 44E0h
  9337.     DS:DX -> ???
  9338.     SS:BP -> stack frame (see below)
  9339. Return: ???
  9340. Note:    this function is also supported by Beame&Whiteside's BWPCNFS shim; the
  9341.       description presented here was derived from that shim
  9342.  
  9343. Format of stack frame:
  9344. Offset    Size    Description
  9345.  00h    WORD    -> previous stack frame
  9346.  02h    DWORD    return address
  9347. --------d-2144FFBXFFFF-----------------------
  9348. INT 21 U - NewSpace - ???
  9349.     AX = 44FFh
  9350.     BX = FFFFh
  9351.     DX = ???
  9352. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  9353.       all files as they are written and decompresses them as they are read
  9354. SeeAlso: AX=4414h/BX=FFFFh
  9355. --------!------------------------------------
  9356.